为什么容器类型没有类型类?

Vek*_*weg 5 haskell

我发现一些容器具有非常相似的功能集.例如,List,Set,Sequence,Text和Bytestrings.我想知道为什么他们不使用一个或多个常见的类型类.

lef*_*out 9

他们有什么共同的功能集?AFAICS,只能将多个容器组合成一个容器,并生成空容器.事实上,他们确实是全部Monoid,提供了完全相同的界面!

你不能对所有这些做任何其他事情,因为有些是多态的,有些是单态的.


Pet*_*lák 7

实际上有,看问题使单个函数在列表,ByteStrings和文本(以及可能的其他类似表示)上工作,这几乎是你的重复.

在一个单独的包中的主要原因可能是它需要语言扩展 - 功能依赖或类型系列.我们必须以某种方式说Text只能包含Chars,ByteString只能包含Word8s,[]可以包含任何类型,并且Set只能包含实例Ord.