【问题标题】:What's the history behind the Functor type class?Functor 类型类背后的历史是什么?
【发布时间】: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 map function takes collections and returns lazy sequences。相比之下,Functor 类基于等式定律,并且对实现不做任何假设,从而导致像 IO 和 FRP Behavior 类型这样的非集合实现。

标签: haskell functor category-theory


【解决方案1】:

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

【讨论】:

  • 确实如此。在被 Haskell 采用之前,Jones 在 Gofer 中实现了构造器类。 Hugs 是 Haskell 用户的 Gofer System 的缩写,在 ghc 处于领先地位之前,引入该系统是为了让 Haskell 人能够访问一些更高级的类型系统。
  • 太棒了!这看起来是一篇很棒的论文,第一部分正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 2010-12-17
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多