仿函数语法`map` for function不起作用?

时间:2017-10-02 19:25:31

标签: scala scala-cats

我似乎无法用猫"org.typelevel" %% "cats-core" % "1.0.0-MF"编译它,这对"org.typelevel" %% "cats-core" % "0.9.0",来说很好。

import cats._
import cats.instances.all._
import cats.syntax.all._

val func1 = (x: Int) => x.toDouble
val func2 = (y: Double) => y * 2
val func3 = func1.map(func2)
func3(3)

错误是:

Error:(7, 25) value map is not a member of Int => Double
lazy val func3 = func1.map(func2)
                       ^

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找的东西可能只是功能构成。你可以这样做:

val func3 = func1 andThen func2

val func3 = func2 compose func1

但是,如果要映射功能,则需要启用partial-unification。 最简单的方法是添加sbt-partial-unification plugin

如果你使用的是Scala 2.11.9或更高版本,你也可以简单地添加编译器标志:

scalacOptions += "-Ypartial-unification"

使用其中任何一个编译都可以:

val func1 = (x: Int) => x.toDouble
val func2 = (y: Double) => y * 2
val func3 = func1.map(func2)