【发布时间】:2017-11-07 18:02:30
【问题描述】:
我正在阅读Learn You a Haskell,我想知道为什么这么多东西都像一个列表一样,而 Prelude 中没有任何东西使用类型类的本机设施来设置它:
" : 的字节串版本被称为 cons 它需要一个字节和一个字节串并将字节放在开头。虽然它很懒,所以即使字节串中的第一个块未满,它也会创建一个新块. 这就是为什么如果要在字节串的开头插入大量字节,最好使用严格版本的 cons, cons'。”
为什么没有 TypeClass listable 或提供: 函数来统一Data.ByteString、Data.List、Data.ByteString.Lazy 等的东西?这是有原因的,还是这只是传统 Haskell 的一个元素?以: 为例有点轻描淡写,同样来自 LYAH:
否则,bytestring 模块具有类似于 Data.List 中的功能的负载,包括但不限于 head、tail、init、null、length、map、reverse、foldl、foldr、concat、 takeWhile、过滤器等
【问题讨论】:
-
您能解释一下您想象中的工作原理吗?显然不可能有一个类型类同时包含
ByteString和[]作为实例,因为[]具有类型* -> *和ByteString只是*。 -
@Travis Brown:您可以使用一个简单参数化的新类型包装器来做到这一点。这已经被重新发明了几次,但这里有一个例子hackage.haskell.org/packages/archive/iteratee/0.2.1/doc/html/…
-
如果有一个库可以满足您的需求,那么为什么需要将它包含在适当的语言中?
-
@Robert,如果我有他们,我会给你 10 多票。
-
@Robert,@luqui,我不明白你的问题,或者你的问题没有意义......让我们假设没有提供
=的类型类,并且Prelude 为每种数字类型提供了不同的函数来测试相等性;此外,每个图书馆都遵循相同的约定。那么问为什么语言本身中没有使用类型类不是一个公平的问题。如果你能回答这个问题,你可能已经准备好回答我的问题了。