Trong khi đọc các mô tả về functors trên blog này:Scala - Cách sử dụng Functors trên các loại phi chức năng?
https://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/
có một định nghĩa chung của functor và cụ thể hơn một:
trait GenericFunctor[->>[_, _], ->>>[_, _], F[_]] {
def fmap[A, B](f: A ->> B): F[A] ->>> F[B]
}
trait Functor[F[_]] extends GenericFunctor[Function, Function, F] {
final def fmap[A, B](as: F[A])(f: A => B): F[B] =
fmap(f)(as)
}
Rõ ràng điều này có nghĩa functors có thể được sử dụng với khác loại cao hơn bên cạnh các đối tượng chức năng. Có thể ai đó xin vui lòng đưa ra một ví dụ hoặc giải thích làm thế nào hoặc tại sao hoặc trong những kịch bản đó sẽ được thực hiện? Cụ thể, việc thực hiện khác của GenericFunctor là gì trong Scala - sử dụng một hàm tạo kiểu khác từ Hàm? Cảm ơn!
EDIT:
Chỉ cần làm rõ:
object Functor {
def fmap[A, B, F[_]](as: F[A])(f: A => B)(implicit functor: Functor[F]): F[B] =
functor.fmap(as)(f)
implicit object ListFunctor extends Functor[List] {
def fmap[A, B](f: A => B): List[A] => List[B] =
as => as map f
}
}
scala> fmap(List(1, 2, 3))(x => x + 1)
res0: List[Int] = List(2, 3, 4)
Chỉ cần làm rõ, theo sự hiểu biết ListFunctor tôi thực hiện 1-arg fmap trong GenericFunctor trong khi các mã trong bảng điểm repl gọi fmap trong Trait Functor, mà lần lượt gọi một thực hiện fmap (ví dụ như trong ListFunctor).
Điều này không thay đổi câu hỏi tổng thể, chỉ nghĩ rằng nó sẽ giúp mọi người cố gắng cung cấp câu trả lời. Mọi thông tin chi tiết được cung cấp sẽ được đánh giá cao.
Tôi không nghĩ rằng hàm giả là một hàm. Tôi không thể thấy cách bạn triển khai một danh mục. – Anonymous