Reputation: 5020
With a function, an implicit parameter can have an arg.type
where arg
is in the explicit parameter list. But apparently, not with a class:
Welcome to Scala version 2.11.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_51).
scala> trait Applicable[A]
defined trait Applicable
scala> def f(a: AnyRef)(implicit ev: Applicable[a.type]): a.type = ???
f: (a: AnyRef)(implicit ev: Applicable[a.type])a.type
scala> case class Kniption(a: AnyRef)(implicit ev: Applicable[a.type])
<console>:8: error: not found: value a
case class Kniption(a: AnyRef)(implicit ev: Applicable[a.type])
^
<console>:8: error: type mismatch;
found : Applicable[a.type]
required: Applicable[a.type]
case class Kniption(a: AnyRef)(implicit ev: Applicable[a.type])
^
Is this a bug or a feature? If this behavior makes sense, can you explain why?
Upvotes: 0
Views: 107
Reputation: 6385
Looks like in class definition for scala it's not enough information for types inference. What about defining Kniption parametrized:
case class Kniption[T](a: T)(implicit ev: Applicable[T])
Upvotes: 1