Open
Description
Welcome to Scala 2.12.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions for evaluation. Or try :help.
scala> import scala.language.higherKinds
import scala.language.higherKinds
scala> val byNameContainer = {
| def unwrap[ByName0[_]](f: ByName0[Unit] => Unit) = new {
| type ByName[A] = ByName0[A]
| }
| val f: (=> Unit) => Unit = { _ =>
| ()
| }
| unwrap(f)
| }
byNameContainer: Object{type ByName[A] = => A} = $anon$1@69fa8e76
scala>
scala> type ByName[A] = byNameContainer.ByName[A]
defined type alias ByName
scala>
scala> trait IsByName[F] {
| type Value
|
| def make(byName: ByName[Value]): F
| def extract(byName: F): Value
| }
defined trait IsByName
scala>
scala> object IsByName {
| type Aux[F, Value0] = IsByName[F] {
| type Value = Value0
| }
| implicit def apply[Value0]: IsByName.Aux[ByName[Value0], Value0] =
| new IsByName[ByName[Value0]] {
| override type Value = Value0
|
| override def make(byName: ByName[Value0]): ByName[Value0] = byName
|
| override def extract(byName: => Value0): Value0 = byName
| }
| }
defined object IsByName
warning: previously defined trait IsByName is not a companion to object IsByName.
Companions must be defined together; you may wish to use :paste mode for this.
scala> IsByName[Int].make(1)
java.lang.ClassCastException: java.lang.Integer cannot be cast to scala.Function0
at IsByName$$anon$1.make(<console>:22)
at IsByName$$anon$1.make(<console>:19)
... 29 elided