Tôi đang gặp khó khăn để hiểu được định nghĩa hàm sau trong Traverse
đặc điểm trong Scalaz:Scalaz `F [_]: Ràng buộc loại áp dụng` ngụ ý sử dụng các tham số ngầm định như thế nào?
def traverse[F[_] : Applicative, A, B](f: A => F[B], t: T[A]): F[T[B]]
Phần tôi không hiểu là F[_] : Applicative
.
Bây giờ, chúng ta hãy xem Applicative
là gì:
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)
}
Ở đây, cho traverse
để làm việc cho một số loại F
, người ta cần để mang lại một đối tượng tiềm ẩn của loại Applicative[F]
trong phạm vi.
Tôi muốn hiểu một vài điều:
- Wat chính xác không
F[_] : Applicative
nghĩa là gì? - Tại sao
F[_]
có liên quan đếnApplicative
? Chúng ta cầnApplicative[F]
, chứ không phải F [cái gì đó] mở rộng quyền ứng dụng? - Tại sao phương pháp này sử dụng giá trị ẩn của loại
Applicative[F]
mà không khai báo các tham số ngầm?
Aha, vì vậy tính năng ** này là ** một tính năng ngôn ngữ đặc biệt! Cảm ơn bạn! – Rotsor