Skip to content

Commit e710af6

Browse files
committed
Added test case for LMS inspired HK code.
Closes #94.
1 parent f600df4 commit e710af6

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

tests/pos/i94-nada.scala

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import scala.language.higherKinds
2+
3+
trait Base {
4+
type Rep[T]
5+
}
6+
7+
trait BaseExp extends Base {
8+
type Rep[T] = Exp[T]
9+
case class Exp[T](v: T)
10+
}
11+
12+
trait BaseStr extends Base {
13+
type Rep[T] = String
14+
}
15+
16+
trait BaseDirect extends Base {
17+
type Rep[T] = T
18+
}
19+
20+
trait Test1 {
21+
trait Monad[X] {
22+
def x: X
23+
}
24+
sealed abstract class Either[A,B]
25+
case class Left[A,B](x: A) extends Either[A,B] with Monad[A]
26+
case class Right[A,B](x: B) extends Either[A,B] with Monad[B]
27+
def flatMap[X,Y,M[X]<:Monad[X]](m: M[X], f: X => M[Y]): M[Y] = f(m.x)
28+
println(flatMap(Left(1), {x: Int => Left(x)}))
29+
}
30+
trait Test2 {
31+
trait Monad[X] {
32+
def x: X
33+
}
34+
sealed abstract class Either[A,B]
35+
case class Left[A,B](x: A) extends Either[A,B] with Monad[A]
36+
case class Right[A,B](x: B) extends Either[A,B] with Monad[B]
37+
def flatMap[X,Y,M[X]](m: M[X], f: X => M[Y]): M[Y]
38+
println(flatMap(Left(1), {x: Int => Left(x)}))
39+
}
40+
trait Test3 {
41+
def flatMap[X,Y,M[X]](m: M[X], f: X => M[Y]): M[Y]
42+
println(flatMap(Some(1), {x: Int => Some(x)}))
43+
}

0 commit comments

Comments
 (0)