aboutsummaryrefslogtreecommitdiff
path: root/tests/pos/flowops.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-03-19 19:40:47 +0100
committerMartin Odersky <odersky@gmail.com>2016-03-30 09:51:02 +0200
commit0855b071d913e7acd5271ab34062c69e25cd93cd (patch)
tree471dbd97344a9946e71a20ac80bf0ba59cd3b848 /tests/pos/flowops.scala
parent035aff45e89084290b8f67ca49007c3eac00f13f (diff)
downloaddotty-0855b071d913e7acd5271ab34062c69e25cd93cd.tar.gz
dotty-0855b071d913e7acd5271ab34062c69e25cd93cd.tar.bz2
dotty-0855b071d913e7acd5271ab34062c69e25cd93cd.zip
Fixes to checkNonCyclic
Simplified logic and now check prefixes of TypeRefs. Without the simplified logic we would get false cyclic errors for ski.scala. Test case: flowops.scala Fixes #1185.
Diffstat (limited to 'tests/pos/flowops.scala')
-rw-r--r--tests/pos/flowops.scala31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/pos/flowops.scala b/tests/pos/flowops.scala
new file mode 100644
index 000000000..6aead26be
--- /dev/null
+++ b/tests/pos/flowops.scala
@@ -0,0 +1,31 @@
+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
+}