Traverse
Scalaz の traitの次の関数定義を理解するのに苦労しています:
def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
わからない部分はF[_] : Applicative
.
さて、何が何であるか見てみましょうApplicative
:
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)
}
ここで、 fortraverse
が何らかの type に対して機能するにF
は、 type の暗黙的なオブジェクトをApplicative[F]
スコープに入れる必要があります。
私はいくつかのことを理解したいです:
- どういう
F[_] : Applicative
意味ですか? F[_]
と関係があるのはなぜApplicative
ですか?Applicative[F]
F[something] extends Applicative じゃなくて が必要ですよね?Applicative[F]
このメソッドは、暗黙的なパラメーターを宣言せずに型の暗黙的な値を使用するのはなぜですか?