scala - 如何显式调用和使用 Functor 函数
问题描述
import scala.language.higherKinds
import cats.Functor
import cats.instances.list._
import cats.instances.function._
val list1 = List(1, 2)
val list2 = Functor[List].map(list1)(i => i + 1)
但是对于函数来说事情并没有那么顺利,
val f1 = (i: Int) => i.toString
val f2 = (s: String) => s
我们不得不求助于打字技巧,
scala> type TTT[A] = Int => A
// defined type alias TTT
scala> val ff = Functor[TTT].map(f1)(f2)
// ff: TTT[String] = scala.Function1$$Lambda$607/69160933@3a689738
嗯......有没有更直接的方法来解决这个问题,因为这对于复杂的功能往往会变得非常乏味。
解决方案
你可以写
val ff = Functor[Int => ?].map(f1)(f2)
如果你添加 addCompilerPlugin("org.spire-math" %% "kind-projector" % "0.9.7")
到build.sbt
.
或者您可以导入仿函数语法import cats.syntax.functor._
,然后使用类型归属进行编写
val ff = (f1: TTT[String]).map(f2)
或使用显式类型注释
val f1: TTT[String] = (i: Int) => i.toString
val ff = f1.map(f2)
推荐阅读
- java - Java中断/停止定时器
- power-automate - 如何在 MS Flow 中处理 HTTP 302 重定向
- c# - 如何设置音频源以根据字符距离从低音量到高音量收听音频?
- dart - 如何删除 scoped_model 状态?
- python - 为什么我不断收到 bin/sh: 1 :: not found
- python - 可以通过 MySQL Workbench 但不能通过 python 连接到 AWS RDS
- javascript - 客户端上的 encodeURIComponent 和服务器上的 decodeURIComponent
- jquery - 根据鼠标悬停时子div的属性设置父div的背景图片
- reactjs - Textarea autoheight 在 flex 中不起作用
- java - Netbeans IDE 用户 - 在 Windows 10 上安装 Netbeans 8.0.2 时出现问题