【问题标题】:Shapeless example with map won't compile (scala)带有地图的无形示例无法编译(scala)
【发布时间】:2014-01-02 23:13:25
【问题描述】:

我正在尝试以无形的形式映射 HList。以下示例源自here

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 版本,我也会遇到这个问题。我应该改变什么来使这个例子编译和运行?

【问题讨论】:

  • Works for me。你的sbt 是什么版本?
  • 在 sbt 0.12.10.12.40.13.00.13.1 上测试。您确定问题出在此代码示例中吗?
  • @senia 哇,感谢您的测试。它现在也适用于我。我尝试注释掉项目中所有其他文件中的所有代码,并修复了它。奇怪的是,当我取消注释相同的代码并再次编译时,该示例仍然有效。所以,我真的不知道问题出在哪里。感谢您抽出宝贵时间。
  • sbt clean 来救援。
  • @jcrudy 对于回答自己的问题并获得批准,您有何看法?

标签: scala shapeless


【解决方案1】:

问题从未确定。解决方案是注释掉项目中所有其他 scala 文件中的所有代码,重新编译,然后取消注释并再次编译。毫无疑问

sbt clean

本来也可以的。

【讨论】:

    猜你喜欢
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2011-07-23
    • 2020-09-13
    • 2018-12-02
    相关资源
    最近更新 更多