sealed abstract trait HList
case class :+:[H, T <: HList](head: H, tail: T) extends HList {
def :+:[T](v: T) = new :+:(v, this)
}
case object HNil extends HList {
def :+:[T](v: T) = new :+:(v, this)
}
object HListExpt {
def main(args: Array[String]) {
val me: String :+: Int :+: Symbol :+: HNil.type = "Rahul" :+: 20 :+: 'Male :+: HNil
println(me.head, me.tail.head)
}
}
上記のコードをコンパイルしようとすると、次のコンパイラエラーが発生します。
error: type mismatch;
found : :+:[java.lang.String,:+:[Int,:+:[Symbol,object HNil]]]
required: :+:[String,:+:[Int,:+:[Symbol,HNil.type]]]
val me: String :+: Int :+: Symbol :+: HNil.type = "Rahul" :+: 20 :+: 'Male :+: HNil
私はここで何が間違っているのですか?上記を入力して注釈を付ける正しい方法は何でしょうHList
か?
PS:型アノテーションを削除すると、コードは正常にコンパイルされます。