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))
}
