我开始阅读scalaz' source code。
package object scalaz {
import Id._
implicit val idInstance: Traverse1[Id] with Each[Id] with Monad[Id] with Comonad[Id] with Distributive[Id] with Zip[Id] with Unzip[Id] with Align[Id] with Cozip[Id] = Id.id
type Tagged[T] = {type Tag = T}
.
.
.
我应该如何解释type Tagged[T] = {type Tag = T}
?
这是什么意思?
这个Scala语法描述在哪里?
我对此完全感到困惑。
它做了什么?
为什么?
有人可以提供一个超级简单的例子来解释" dummies" ?
......它有什么好处?
答案 0 :(得分:3)
它的scala结构类型,基本上它意味着满足Tagged [T]的类型应该声明' type Tag'内部
type Tagged[T] = {type Tag = T}
def acceptOnlyTagged[T: ClassTag](tagged: Tagged[T]): Unit = {
println(implicitly[ClassTag[T]])
}
class A {
type Tag = Int
}
class B {
type Tag = String
}
acceptOnlyTagged(new A)
acceptOnlyTagged(new B)
A级& B对Tagged一无所知,但可以被视为Tagged,因为它们共享共同的结构