blob: 24f515651a23b91e062ef21d6ce08af6897de341 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
trait CrashDueToTypeError {
def id[a](x :a) :a = x
trait Bifunctor {
type a; // content
type s <: Bifunctor
// uncomment this-vvvvvvvvvvvvvvvvvvvvvvvvvvvv, and it compiles
def bimap[c](f :a=>c) :s{/*type s=Bifunctor.this.s;*/type a=c; }
}
def hylo[hs <: Bifunctor,ha,hb,hc]
(f :hb=>hs{type s=hs; type a=ha},
g :hs{type s=hs; type a=ha}=>hc)(x :hb)
:hc
= g(f(x).bimap(id))
}
|