ScalaZ:什么是"类型标记[T] = {type Tag = T}"?

时间:2014-10-23 20:44:00

标签: scala scalaz

我开始阅读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" ?

......它有什么好处?

1 个答案:

答案 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,因为它们共享共同的结构