为什么不Haskell的标准库多使用多态?

我在学习Haskell的过程中,和类型类似乎是一个功能强大的方法,使类型安全的多态函数。 但是很多Haskell的前奏功能不会使用它们。 进一步来说:

  • 大多数的列表的功能不与其他的数据结构的工作(例如, foldrlength仅用于列表实现,并且不能对阵列使用)。
  • 像模块Data.ByteString除非你用不可用import qualified ,因为它们包含具有相同的名称作为前奏函数的函数。

好像这两个问题如果标准库用于类型类的通用功能(请让我知道如果我完全关闭基地与本)会消失。

我有两个问题:

  1. 是否有技术或设计上的原因是,前奏是这样的,还是它只是由于历史的原因?
  2. 环顾四周,它看起来像有一些库(比如Data.Foldable ,如果我没有记错,废你的样板)与一般的替代品取代标准的前奏功能。 是否有这些想法纳入哈斯克尔的未来版本的计划吗?

--------------解决方案-------------

有一个很好的务实理由,“标准”哈斯克尔(前奏曲+基地+也许更多一些)不使用更多的多态性:

设计一般用途的类型类很难的。 对于抽象超过容器类型如列表,数组和“字节串”(我个人真的不考虑字节字符串的容器)不浮动轮等类优秀的设计将包括在2012年的Haskell有一些设计如Listlike和爱迪生类和一些人已凿去在该问题,但除外可折叠和Traversable的没有人已经产生任何引人注目的设计。

所使用的哈斯克尔基本类库更加多态-用于为任何单子,工作列表理解map++不仅限于清单,也许还有其他的事情。

但在当时人们认为这导致了混乱的初学者的错误消息和乡亲谁不初学者也可以使用专门的多态版本。

  1. 虽然在基地,特别是前奏很多东西,是历史性的,我认为任何概括会看到大量的技术推回。 主要的问题是速度 - 如果你函数有一个类型的类约束,则你会路过周围字典类型类函数,也许吃更多的空间专业化。
  2. 一些库,如SYB的,使用不哈斯克尔的一部分扩展。 第一项任务将是正式和建立这些功能的支持。 看哈斯克尔'的文件,看看那里的Haskell是怎么回事,你如何能够影响这条道路。

真实世界哈斯克尔大约有这单子变形金刚章的一些见解:

在一个理想的世界里,我们将使从过去决裂,并切换前奏使用Traversable的和可折叠的类型? 可能不会。 学习Haskell已经是一个足够刺激冒险新人。 可折叠和Traversable的抽象是容易拿起的时候,我们已经理解了函子和单子,但他们会把初习上的抽象太纯洁的饮食。 教学语言,这是很好的地图上操作的列表,而不是仿函数。

分类:哈斯克尔 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.562 (s). 10 q(s)