我对Functor有以下定义:
trait Functor[F[_]] {
def map[A, B](fa: F[A])(f: A => B): F[B]
}
object ListFunctor extends Functor[List] { //
def map[A, B](f: A => B)(data: List[A]): List[B] = data map f
}
假设A is Int,B is String ,and F is List
,则f是类型函数:Int => String,我们得到一个函数List [Int] => List [String] with ListFunctor.map(f) _
由于functor与Category紧密相关,我现在正在尝试理解类别,如果A is Int,B is String ,and F is List
我有两个可能的答案,但不知道哪一个是正确的:
1.有四类:
All possible values of Int forms an Int category
All possible values of String forms a String category
All possible values of List[Int] forms a List[Int] category
All possible values of List[String] forms a List[String] category
有两个类别
2.1 Int和String形成一个类别,也就是说,此类别包含Int和String
的所有可能值2.2 List [Int]和List [String]形成另一个类别,即此类别包含List [Int]的所有可能值
我会问上面的哪些答案是正确的?谢谢!
答案 0 :(得分:1)
这里有两个类别:
A => B
和A
的函数B
。List[A]
的{{1}}类型的对象,其状态为所有A
和List[A] => List[B]
的函数A
。 B
是类别之间的映射,Functor
是一个从第一个类别映射到第二个类别的仿函数。
答案 1 :(得分:0)
当我们讨论与编程语言相关的类别时,我们定义了一个类别“Scala”,其中对象是类型,而态射是函数。根据该定义,在类别中定义的每个仿函数都是一个endo-functor。
这意味着map
上的Functor
函数是来自对象A => B
的态射,而函子定义是从Scala类别到其自身的仿函数。