Scalaz`F [_]:Applicative`类型约束如何暗示使用隐式参数?
发布时间:2020-12-16 18:18:00 所属栏目:安全 来源:网络整理
导读:我正在努力理解 Scalaz中 Traverse trait中的以下函数定义: def traverse [F [_]:Applicative,A,B](f:A = F [B],t:T [A]):F [T [B]] 我不理解的部分是F [_]:适用. 现在,让我们看看 Applicative 是什么: trait Applicative[Z[_]] extends Pointed[Z] w
我正在努力理解
Scalaz中
Traverse trait中的以下函数定义:
def traverse [F [_]:Applicative,A,B](f:A => F [B],t:T [A]):F [T [B]] 我不理解的部分是F [_]:适用. 现在,让我们看看 trait Applicative[Z[_]] extends Pointed[Z] with Apply[Z] { override def fmap[A,B](fa: Z[A],f: A => B): Z[B] = this(pure(f),fa) override def apply[A,B](f: Z[A => B],a: Z[A]): Z[B] = liftA2(f,a,(_:A => B)(_: A)) def liftA2[A,B,C](a: Z[A],b: Z[B],f: (A,B) => C): Z[C] = apply(fmap(a,f.curried),b) } 这里,对于某些类型F的遍历工作,需要在范围内引入Applicative [F]类型的隐式对象. 我想了解几件事: > Wat确切地说F [_]:应用意味着什么? 解决方法
我认为所有这三个问题都可以用这个表示法来回答:
def traverse[F[_] : Applicative,B](f: A => F[B],t: T[A]): F[T[B]] 相当于: def traverse[F[_],t: T[A])(implicit $ev: Applicative[F]): F[T[B]] 第一种表示法称为F [_]的context bound. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |