函数的函子语法`map`不起作用?

functor syntax `map` for function does not work?

我似乎无法用猫 "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)
                       ^

我认为您正在寻找的可能只是函数组合。你可以这样做:

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)