作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试像 this page 中那样编写 F 代数.不同之处在于,不是用元组组合,而是像这样:
type FAlgebra[F[_], A] = F[A] => A
def algebraZip[F[_], A, B](fa: FAlgebra[F, A], fb: FAlgebra[F, B])
(implicit F: Functor[F]): FAlgebra[F, (A, B)] =
fab => {
val a = fa(fab.map(_._1))
val b = fb(fab.map(_._2))
(a, b)
}
我想使用一个Seq
,像这样:
def algebraSeq[F[_], A](fa: FAlgebra[F, A])
(implicit F: Functor[F]): FAlgebra[F, Seq[A]] = ???
这可能吗?我需要什么?或者使用 shapeless HList
会有帮助吗?
最佳答案
如果我可以对您的约束做一些细微的改动,我可以找到一个实现:
def algebraSeq[F[_]: Traverse, A](fa: FAlgebra[F, A]): FAlgebra[F, Seq[A]] =
fseq => fseq.sequence.map(f => fa(f))
我需要 Traverse
实例能够将 F[Seq[A]]
排序为 Seq[F[A]]
.
在过去,您必须为 List
而不是 Seq
编写此函数,因为没有 Applicative[Seq]
实例。但是由于添加了 immutable.Seq
的 cats 2.3.0 实例(这是 Scala 2.13 中的默认 scala.Seq
)。
关于scala - 将 F-Algebra[F, A] 组合成 F-Algebra[F, Seq[A]],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48441062/
我是一名优秀的程序员,十分优秀!