File: t7517.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 (22 lines) | stat: -rw-r--r-- 628 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
trait Box[ K[A[x]] ]

object Box {
   // type constructor composition
   sealed trait ∙[A[_], B[_]] { type l[T] = A[B[T]] }

   // composes type constructors inside K
   type SplitBox[K[A[x]], B[x]] = Box[ ({ type l[A[x]] = K[ (A ∙ B)#l] })#l ]

   def split[ K[A[x]], B[x] ](base: Box[K]): SplitBox[K,B] = ???

   class Composed[B[_], L[A[x]] ] {
      val box: Box[L] = ???

      type Split[ A[x] ] = L[ (A ∙ B)#l ]
      val a: Box[Split] = Box.split(box)

      //Either of these work:
      val a1: Box[Split] = Box.split[L,B](box)
      val a2: Box[ ({ type l[A[x]] = L[ (A ∙ B)#l ] })#l ] = Box.split(box)
   }
}