我正在尝试以无形的方式映射 HList。以下示例源自此处:
import shapeless._
import poly._
object Main {
def main(args: Array[String]) = {
object choose extends (Set ~> Option) {
def apply[T](s : Set[T]) = s.headOption
}
val sets = Set(1) :: Set("foo") :: HNil
val opts = sets map choose // map selects cases of choose for each HList element
}
}
不幸的是,我无法编译该示例。编译器说“值映射不是 HCons[scala.collection.immutable.Set[Int],HCons[scala.collection.immutable.Set[String],HNil]] 的成员”。我怀疑缺少定义 HLists 上的映射操作的隐式导入,但我不知道该导入应该是什么。我将 sbt 与以下 build.sbt 文件一起使用:
name := "scala-polymorphism-experiments"
version := "0.1.0"
scalaVersion := "2.10.3"
resolvers ++= Seq(
"Sonatype OSS Releases" at "http://oss.sonatype.org/content/repositories/releases/",
"Sonatype OSS Snapshots" at "http://oss.sonatype.org/content/repositories/snapshots/"
)
libraryDependencies ++= Seq("org.scalatest" % "scalatest_2.10" % "2.0" % "test",
"com.chuusai" % "shapeless" % "2.0.0-SNAPSHOT" cross CrossVersion.full changing())
如果我使用 2.0.0 的 M1 版本,我也会遇到这个问题。我应该改变什么来使这个例子编译和运行?