深入探索 Applicative 与 Traversable 函子
在函数式编程的世界里,Applicative 和 Traversable 函子是非常重要的概念,它们为我们处理数据和操作提供了强大的抽象能力。下面我们将详细探讨它们的相关内容。
1. Applicative 函子的抽象与法则
在创建新的抽象时,我们可以对 Applicative[Validated[E, _]] 实例进行修改,使其仅需要 Semigroup[E] 。以下是具体的实现代码:
given nelSemigroup[A]: Semigroup[NonEmptyList[A]] with
def combine(x: NonEmptyList[A], y: NonEmptyList[A]) =
NonEmptyList(x.head, x.tail ++ (y.head :: y.tail))
given validatedApplicative[E: Semigroup]: Applicative[Validated[E, _]] with
def unit[A](a: => A) = Valid(a)
extension [A](fa: Validated[E, A])
override def map2[B, C](fb: Validated[E, B])(f: (A, B) => C) =
(fa, fb) match
case (Valid(a), Valid(b)) => Valid(f(a, b))
超级会员免费看
订阅专栏 解锁全文
972

被折叠的 条评论
为什么被折叠?



