scala – 如何折叠猫的内同态集合
发布时间:2020-12-16 18:36:52 所属栏目:安全 来源:网络整理
导读:给定一个功能 def f(i: I) : S = S 我想写一个非常常见的组合g def g(is : Seq[I],init: S) : S 简单的实现仅使用经典scala def g(is : Seq[I],init: S) : S = is.foldLeft(init){ case (acc,i) = f(i)(acc) } 我试图使用Foldable但我遇到了编译问题. import
给定一个功能
def f(i: I) : S => S 我想写一个非常常见的组合g def g(is : Seq[I],init: S) : S 简单的实现仅使用经典scala def g(is : Seq[I],init: S) : S = is.foldLeft(init){ case (acc,i) => f(i)(acc) } 我试图使用Foldable但我遇到了编译问题. import cats._ import cats.Monoid import cats.implicits._ def g(is : Seq[I],init: S) : S = Foldable[List].foldMap(is.toList)(f _)(init) 错误是 could not find implicit value for parameter B: cats.Monoid[S => S] 我成功地接受了国家 import cats.data.State import cats.instances.all._ import cats.syntax.traverse._ def g(is : Seq[I],init: S) : S = is.toList.map(i => State.modify(f(i))).sequenceU.runS(init).value 我有一些问题 : >猫是否有一个用于内胚胎的Monoid [更新] type Endo[S] = S => S def g(is : Seq[I],init: S) : S = Foldable[List].foldK[Endo,S](dirs.toList.map(f _)) 但我仍然是一个foldMapK,以避免样板… 解决方法
foldMap在这里不起作用,因为你的f是I => S => S,与foldMap的签名不匹配:
def foldMap[A,B](fa: F[A])(f: (A) ? B)(implicit B: Monoid[B]): B 你需要你的A => B和B => B => B(Monoid)分开. f已经合并了这两个操作.只需使用foldLeft. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容