问题 Functor类型背后的历史是什么?


我正试图深入了解这个问题 Monad 类的层次结构。当然,部分原因是看到了很多例子,但我对这些课程最初被发现的历史及其动机特别感兴趣。

我明白那个 Monads最初是作为Haskell中IO问题的解决方案而出现的,并且熟悉Moggi和Wadler在1989-92介绍它们的论文。

我也看到了哪里 Applicatives 介绍了Conor McBride和Ross Paterson的“有效的应用程序设计”。

我的问题是什么推广 Functors,他们什么时候来的?我认为它必须在之后 Monad 以来 Functor 不是超类,但是自LISP早期以来,人们还没有使用过广义的地图功能吗?


1348
2018-06-02 07:07


起源

Functor类是第一个(在1.3发布之前)Monad的一个超类,但是(遗憾地)收回了因为人们认为这是一个不必要的超类。 - augustss
“[H]自从LISP早期以来,人们一直没有使用广义地图功能?”嗯,有一个区别,因为大多数时候这些“广义地图函数”是基于集合甚至基于序列的。即使在今天,你也会看到这一点,例如Clojure 该 map function接受集合并返回延迟序列。相比之下, Functor class基于等式定律,并没有对实现做出任何假设,导致非集合实现 IO 和FRP Behavior 类型。 - Luis Casillas


答案:


Functor 在Haskell报告的1.3版本中,它标准化了monadic IO和更高级的kinded类型。所以 Functor 类型类与monad类型类一样古老。而且,更重要的是, Functor 是Jones介绍“构造函数类”的第一个激励例子!你可能会说琼斯的论文推广了这个想法,但正如你所指出的那样,人们长期以来一直想要通用地图。


14
2018-06-02 07:27



确实。 Jones在Haskell中被采用之前的某个时候,在Gofer中实现了构造函数类。 Hugs是Haskell用户的Gofer系统的简称,该系统被引入以允许Haskell民众访问一些更先进的类型系统,在ghc最前沿的前几天。 - AndrewC
优秀!这看起来像一篇很棒的论文,第一部分正是我想要的。 - Mike Izbicki
论文发表于 cs.tufts.edu/comp/150GIT/archive/mark-jones/fpca93.pdf - AndrewC