1
- infix type ==> [A , B ] = (A => B ) retains *
1
+ type Top = {* } Any retains *
2
+ infix type ==> [A , B ] = {* } (A => B )
2
3
3
- type Cell [+ T ] = [K ] => (T ==> K ) => K
4
+ type Cell [+ T <: Top ] = [K ] => (T ==> K ) => K
4
5
5
- def cell [T ](x : T ): Cell [T ] =
6
+ def cell [T <: Top ](x : T ): Cell [T ] =
6
7
[K ] => (k : T ==> K ) => k(x)
7
8
8
- def get [T ](c : Cell [T ]): T = c[T ](identity)
9
+ def get [T <: Top ](c : Cell [T ]): T = c[T ](identity)
9
10
10
- def map [A , B ](c : Cell [A ])(f : A ==> B ): Cell [B ]
11
+ def map [A <: Top , B <: Top ](c : Cell [A ])(f : A ==> B ): Cell [B ]
11
12
= c[Cell [B ]]((x : A ) => cell(f(x)))
12
13
13
- def pureMap [A , B ](c : Cell [A ])(f : A => B ): Cell [B ]
14
+ def pureMap [A <: Top , B <: Top ](c : Cell [A ])(f : A => B ): Cell [B ]
14
15
= c[Cell [B ]]((x : A ) => cell(f(x)))
15
16
16
- def lazyMap [A , B ](c : Cell [A ])(f : A ==> B ): {f} () => Cell [B ]
17
+ def lazyMap [A <: Top , B <: Top ](c : Cell [A ])(f : A ==> B ): {f} () => Cell [B ]
17
18
= () => c[Cell [B ]]((x : A ) => cell(f(x)))
18
19
19
20
trait IO :
@@ -32,7 +33,7 @@ def test(io: {*} IO) =
32
33
33
34
val r = lazyMap[{io} () => Int , Unit ](c)(f => g(f))
34
35
val r2 = lazyMap[{io} () => Int , Unit ](c)(g)
35
- // val r3 = lazyMap(c)(g)
36
+ val r3 = lazyMap(c)(g)
36
37
val _ = r()
37
38
val _ = r2()
38
- // val _ = r3()
39
+ val _ = r3()
0 commit comments