File: t8170b.scala

package info (click to toggle)
scala 2.11.12-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 62,924 kB
  • sloc: javascript: 28,808; java: 13,415; xml: 3,135; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (25 lines) | stat: -rw-r--r-- 698 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import language._

object ScalaZeee {
  trait HFold[M[_], U] {
    type Apply[E, A <: U] <: U
  }
  trait GenericCons[M[_], H, +T <: GenericList[M]] extends GenericList[M] {
    val tail: T
    override type Folded[N[X] >: M[X], U, F <: HFold[N, U]] = F#Apply[H, tail.Folded[N, U, F]]
  }
  val KNil: GenericList[Nothing] = ???
  sealed trait GenericList[+M[_]] {
     type Folded[N[X] >: M[X], U, F <: HFold[N, U]] <: U
  }
}
 
object TypelevelUsage {
  import ScalaZeee._
  type T = GenericCons[Some, String, KNil.type]
  val klist1: T = ???
  type T2 = klist1.Folded[Option, Int, HFold[Option, Int]]
  val count2: T2 = ???
   
  count2.ensuring(x => true).toChar // trigger an implicit search
}