File: t608.scala

package info (click to toggle)
scala 2.11.8-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 61,060 kB
  • ctags: 3,923
  • sloc: java: 13,251; xml: 3,214; sh: 1,553; python: 756; makefile: 40; 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))
}