Created
April 29, 2011 08:49
-
-
Save hubertp/948063 to your computer and use it in GitHub Desktop.
Implicit ambiguity example
This file contains hidden or 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
object ImplicitConvAmbiguity2 { | |
class N[T] | |
class NE[T] extends N[T] | |
class NN[T] extends N[T] | |
class NQ[T] extends N[T] | |
class NZ[T] extends N[T] | |
class AA[A] | |
class BB[A] | |
class Foo | |
class Bar | |
implicit def conv1(i: Float) = new NE[Float] | |
implicit def conv3(op: AA[java.util.TooManyListenersException]) = new N[java.util.TooManyListenersException] | |
implicit def conv4(op: AA[Float]) = new N[Float] | |
implicit def conv6(op: AA[Foo]) = new N[Foo] | |
implicit def conv7(i: Float) = new NZ[Float] | |
implicit def conv5(e: BB[java.util.GregorianCalendar]) = new N[java.util.GregorianCalendar] | |
def aFunc[A](a: NE[A]) = new AA[A] | |
def aFunc[A](a: NZ[A]) = new AA[Float] | |
def aFunc[A](a: NN[A]) = new BB[A] | |
def aFunc[A](a: NQ[A]) = new BB[A] | |
def bFunc[T](e1: N[T]) = {} | |
def typeMe1 { | |
val x = aFunc(4F) | |
bFunc(x) | |
} | |
def typeMe2 { | |
bFunc(aFunc(4F)) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment