我有以下仿函数定义为什么函子更高Kinded型
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
}
在Scala中,这是很常见的F
是集合类型,如List,SEQ,选择,我会问为什么函子必须是更高的亲属类型,并且类型参数F
真的意味着什么?
函数是许多(更高kinded)类型如List和Option的通用接口。类型参数F表示“这是我们为接口定义的类型”。 –
Thanks @ n.m。您的解释从代码的角度来看是有意义的。我想问一下为什么仿函数的形式如函数[F [_]]'。在我看来,函子的目标是将F [A]转换为F [B],如果A => B,这里F的含义并不重要。只要F [A]和F [B]有意义,它可以是一个容器或上下文或其他一些容器。 – Tom
如果它不比'map'的签名看起来要高? – sepp2k