File: t608.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 (17 lines) | stat: -rw-r--r-- 437 bytes parent folder | download | duplicates (4)
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))
}