Ben Scalaz içinde Traverse
özelliği aşağıdaki işlevi tanımı anlamak mücadele ediyorum:Scalaz `F [_]: Applicative 'tip kısıtlaması örtük parametrelerin kullanımını nasıl sağlar?
def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
anlamıyorum bölüm F[_] : Applicative
olduğunu.
Şimdi, Applicative
ne olduğunu görelim: Burada
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)
}
, traverse
bazı tip F
için çalışmak için, bir kapsamda tip Applicative[F]
örtülü bir nesneyi getirmek gerekiyor.
Ben bazı şeyleri anlamak istiyorum:
- Wat tam
F[_] : Applicative
anlama geliyor? F[_]
,Applicative
ile bir sorun mu var?Applicative[F]
'a ihtiyacımız var, F [bir şey] Uygulamanın doğru değil mi?- Bu yöntemde, örtülü parametreler bildirilmeden
Applicative[F]
türünde örtük değerler kullanılıyor?def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
bu eşdeğerdir:
Aha, bu yüzden ** bu özel bir dil özelliğidir! Teşekkür ederim! – Rotsor