5
나는 Scalaz에 Traverse
특성에 다음 함수의 정의를 이해하는 데 어려움을 겪고 오전 :Scalaz`F [_] : Applicative` 타입 제약은 암시 적 파라미터의 사용을 어떻게 의미합니까?
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)
}
을 traverse
이 어떤 종류의 F
위해 일을 위해, 하나는 범위 형 Applicative[F]
의 내장 객체를 가져올 필요가있다.
나는 몇 가지를 이해하고 싶습니다 :
- 와트는 정확히
F[_] : Applicative
는 뜻입니까? F[_]
은Applicative
과 어떤 관련이 있습니까? 우리는Applicative[F]
이 필요합니다. F [무언가]가 적용 권리를 연장하지 않습니까?- 왜이 메서드는 암시 적 매개 변수를 선언하지 않고
Applicative[F]
유형의 암시 적 값을 사용합니까?def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
이 동일합니다 :
아하, **이 ** 특수 언어 기능입니다! 고맙습니다! – Rotsor