Created
November 25, 2014 04:24
-
-
Save dohzya/d9de26a5b4a888d271ab to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// B must be defined when calling foo | |
def foo[A, B](a: A) = (f: A => B) => f(a) | |
// Do not do “val foo3 = foo(3)”: the type of B will be Nothing | |
val foo3 = foo[Int, Int](3) | |
foo3 { x => x * 2 } | |
// impossible to do something like “foo3 { x => s"(%x)" }” | |
// defining Forall | |
trait Forall[F[_]] { def apply[A]: F[A] } | |
// The definition of bar it a bit more complex :-( | |
def bar[A](a: A) = new Forall[({ type F[B] = (A => B) => B })#F] { | |
def apply[B]: (A => B) => B = f => f(a) | |
} | |
// calling bar (the type of “3” is the only one that have to be defined) | |
var bar3 = bar(3) | |
// calling bar3 with a function which returns an Int | |
bar3[Int] { x => x * 2 } | |
// calling bar3 with a function which returns a String | |
bar3[String] { x => s"(%x)" } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment