gpt4 book ai didi

scala - 为什么 Functor 是更高种类的类型

转载 作者:行者123 更新时间:2023-12-04 18:01:44 25 4
gpt4 key购买 nike

我有以下仿函数定义

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,Option,请问为什么Functor一定是higher kinded类型,类型参数 F是什么?真正的意义?

最佳答案

why Functor has to be higher kinded type


Functor必须更高级,因为我们想抽象一个类型参数,该类型参数本身带有一个类型参数(我们称之为类型构造函数,将 Functor[List] 作为一个具体示例)。
Functor 的类型类型交易被称为“一阶种类”,它们的种类是 * -> * .当您查看 Functor 的具体实例时,你看我们不提供内部类型参数。例如,当您为 List 定义仿函数时正如您在示例中所做的那样,您将其定义为 Functor[List] .我们不是为正确的类型(即 List[Int] )创建仿函数,而是为 List 中包含的任何类型创建仿函数。 .这种抽象带来了强大的力量,因为您可以将它用于任何适当的 List类型(类型 *),可以是 List[String] , List[Int] , ETC..

我总是喜欢引用 Adriaan Moore 在他的论文“Genrics Of A Higher Kind”中绘制的图像:

Higher Kinds

What does the type parameter F really mean


F的唯一目的是与 Functor 的实现者定义一个契约(Contract)。 .由 F 签名我们可以推断出什么样的类型 Functor预计。当我们看到它有一个“占位符”( [_] )时,按照惯例,我们知道这意味着 F应该采用单个类型参数。如果我们考虑所有采用单个类型参数的类型,我们可以看到有很多,例如 List , Option , Try , Future , Task , ETC。

有关更高种类的类型的更广泛解释,请参阅 What is a higher kinded type in Scala?

关于scala - 为什么 Functor 是更高种类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45902100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com