aboutsummaryrefslogblamecommitdiff
path: root/tests/disabled/pos/flowops.scala
blob: 6aead26bedf771c8228f8532861d1c4be3737824 (plain) (tree)






























                                                                              
object Test {
  import language.higherKinds

  class NotUsed

  trait FO[+Out, +Mat] { self =>
    type Repr[+O] <: FO[O, Mat] {
      type Repr[+OO] = self.Repr[OO]
    }
    def map[T](f: Out => T): Repr[T] = ???
  }

  class Source[+O, +M] extends FO[O, M] {
    type Repr[+OO] <: Source[OO, M]
  }

  class Flow[-I, +O, +M] extends FO[O, M] {
    type Repr[+OO] <: Flow[I, OO, M]
  }

  implicit class x[O, M, F[o, m] <: FO[o, m]](val f: F[O, M]) extends AnyVal {
    def xx(i: Int): f.Repr[O] = f.map(identity)
  }

  type IntFlow[O, M] = Flow[Int, O, M]

  val s1 = new Source[Int, NotUsed].xx(12)
  val s2: Source[Int, NotUsed] = s1
  val f1 = x[Int, NotUsed, IntFlow](new Flow[Int, Int, NotUsed]).xx(12)
  val f2: Flow[Int, Int, NotUsed] = f1
}