gpt4 book ai didi

scala - 将 F-Algebra[F, A] 组合成 F-Algebra[F, Seq[A]]

转载 作者:行者123 更新时间:2023-12-02 09:14:34 26 4
gpt4 key购买 nike

我正在尝试像 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com