summaryrefslogtreecommitdiff
path: root/test/files/pos/t2712-5.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2016-05-27 17:58:17 +1000
committerJason Zaugg <jzaugg@gmail.com>2016-05-27 17:58:17 +1000
commit6b2037a2161de650fdbb010ba1da23d843247234 (patch)
treea6cffc611df52861a7917493c88a67d9e58ad72c /test/files/pos/t2712-5.scala
parent79ec0f31e611d37d5c50a966a4cd6bf24d96cda6 (diff)
parentbf478084fdf65c7bd156e2e6f04a96bfadf6986b (diff)
downloadscala-6b2037a2161de650fdbb010ba1da23d843247234.tar.gz
scala-6b2037a2161de650fdbb010ba1da23d843247234.tar.bz2
scala-6b2037a2161de650fdbb010ba1da23d843247234.zip
Merge pull request #5102 from milessabin/2.12.x
SI-2712 Add support for partial unification of type constructors
Diffstat (limited to 'test/files/pos/t2712-5.scala')
-rw-r--r--test/files/pos/t2712-5.scala29
1 files changed, 29 insertions, 0 deletions
diff --git a/test/files/pos/t2712-5.scala b/test/files/pos/t2712-5.scala
new file mode 100644
index 0000000000..ed96d4c06f
--- /dev/null
+++ b/test/files/pos/t2712-5.scala
@@ -0,0 +1,29 @@
+package test
+
+import scala.language.higherKinds
+
+trait Functor[F[_]] {
+ def map[A, B](f: A => B, fa: F[A]): F[B]
+}
+
+object Functor {
+ implicit def function[A]: Functor[({ type l[B] = A => B })#l] =
+ new Functor[({ type l[B] = A => B })#l] {
+ def map[C, B](cb: C => B, ac: A => C): A => B = cb compose ac
+ }
+}
+
+object FunctorSyntax {
+ implicit class FunctorOps[F[_], A](fa: F[A])(implicit F: Functor[F]) {
+ def map[B](f: A => B): F[B] = F.map(f, fa)
+ }
+}
+
+object Test {
+
+ val f: Int => String = _.toString
+
+ import FunctorSyntax._
+
+ f.map((s: String) => s.reverse)
+}