diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2016-05-27 17:58:17 +1000 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2016-05-27 17:58:17 +1000 |
commit | 6b2037a2161de650fdbb010ba1da23d843247234 (patch) | |
tree | a6cffc611df52861a7917493c88a67d9e58ad72c /test/files/pos/t2712-5.scala | |
parent | 79ec0f31e611d37d5c50a966a4cd6bf24d96cda6 (diff) | |
parent | bf478084fdf65c7bd156e2e6f04a96bfadf6986b (diff) | |
download | scala-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.scala | 29 |
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) +} |