|
|
1
21
在解释原因之前,这里有一个问题的总结,以及你可以做些什么。施工人员
如果计划一次性替换数据类型,则可以定义自己的名称,并在以后重新定义它们。
请注意
为什么哈斯凯尔有这么多列出来的东西
列表通常用于表示顺序
计算
,而不是数据。在命令式语言中,可以使用循环来构建一个集合,该循环创建元素并将它们逐个插入集合中。在Haskell中,通过创建一个列表,然后将该列表传递给
事实上,有些函数可能是泛型的,但它们是特定于列表的。一些常见功能如
有几个类是列表的有用概括:
其中,只有函子和单子在有影响力的Haskell 98规范中,所以其他的在不同程度上被图书馆作者忽略了,这取决于图书馆是什么时候编写的,以及维护的积极性。核心库在支持新接口方面做得很好。 |
|
|
2
7
我记得在某个地方读到过
编辑:“某处”是《蒙纳读者》第13期,第20页,脚注3:
为了
|
|
|
3
5
一个挑剔的数据序列对于“列表操作”来说效率不高,对于序列操作来说效率更高。也就是说,Data.List中的很多函数都是顺序操作。Sequence必须为cons(<|)做相当于list(:)的更多工作,它的内存表示也比list大一些,因为它由finger tree和Deep两种数据类型组成。 列表的额外语法是好的,它在列表擅长的地方找到了最佳点-cons(:)和左边的模式匹配。序列是否应该有额外的语法还有待进一步的讨论,但是由于使用列表有很长的路要走,而且列表本身很简单,所以必须有好的语法。 List不是字符串的理想表示形式-内存布局效率低下,因为每个字符都用构造函数包装。这就是为什么引入了ByteStrings。尽管它们是作为数组布局的,但ByteStrings必须做一些管理工作-[Char]如果使用短字符串,仍然具有竞争力。在GHC中,有一些语言扩展来赋予ByteStrings更多类似字符串的语法。 另一个主要的lazy函数Clean总是将字符串表示为字节数组,但它的类型系统使这一点更加实用——我相信ByteString库在幕后使用了unsafeperformio。 |
|
|
4
4
对于版本7.8,ghc支持重载列表文本,比较
manual
. 例如,假设适当
(引自文件)。 |
|
|
5
2
我很肯定这不会回答你的问题,但仍然是。
我希望Haskell有更自由的函数名(mixfix!)
a la Agda
. 然后,列表构造函数的语法(
在列表类型和自定义序列类型之间迁移时,代码更改的数量将是最小的。
关于
前奏曲是伟大的,但它不是哈斯克尔最好的部分。 |