【发布时间】:2013-06-02 07:07:57
【问题描述】:
我正在努力深入了解Monad 类的层次结构。当然,其中一部分原因是看到了很多例子,但我对这些类最初是如何被发现的历史及其动机特别感兴趣。
我知道Monads 最初是作为 Haskell 中 IO 问题的解决方案出现的,并且我熟悉 Moggi 和 Wadler 在 1989-92 年的论文中介绍了它们。
我还看到 Applicatives 在 Conor McBride 和 Ross Paterson 的“Applicative Programming with Effects”中被介绍的地方。
我的问题是什么使Functors 流行起来,它们是什么时候出现的?我认为它一定是在Monad 之后,因为Functor 不是超类,但是自从LISP 早期以来人们就没有使用广义地图函数吗?
【问题讨论】:
-
Functor 类最初(在 1.3 发布之前)是 Monad 的超类,但它(遗憾地)被撤回了,因为人们认为它是一个不必要的超类。
-
“[H]自 LISP 早期以来人们就没有使用广义地图函数吗?”嗯,有一个区别,大多数时候这些“广义映射函数”是基于集合的,甚至是基于序列的。即使在今天,您也会在例如 Clojure 中看到这一点,其中 the
mapfunction takes collections and returns lazy sequences。相比之下,Functor类基于等式定律,并且对实现不做任何假设,从而导致像IO和 FRPBehavior类型这样的非集合实现。
标签: haskell functor category-theory