是否有Data.Text的Functor实例?

时间:2013-07-14 19:06:53

标签: haskell text functor

Data.Text存在map,它可能是Functor的一个实例,在编写适用于StringText的通用算法时非常有用秒。有没有理由不存在这样的实例?

3 个答案:

答案 0 :(得分:10)

是的,因为Functor必须是一般的“容器”,而Text只能包含Char

答案 1 :(得分:5)

除了奥古斯特回答之外,还有一个更为一般性的解释:Functor F必须有* -> *种,以便提供映射a -> F a,但Text的种类1}}是*

答案 2 :(得分:2)

由于已经给出的原因,

Text不能是Functor的实例。但是有一个名为ListLike的类型类,它针对的是只有一种元素的数据类型,例如Text只能包含Char个。使用ListLike,您可以编写适用于String以及Text的函数。

使用函数依赖关系定义

class (FoldableLL full item, Monoid full) => ListLike full item | full -> item where
    -- ...
    map :: ListLike full' item' => (item -> item') -> full -> full'
    -- ...

允许您使用函数映射元素,并从中创建另一个(可能不同的)ListLike。 (但请注意,ListLike的某些操作可能效率低下,因此如果您将它们用于大数据,请务必小心。)

请参阅Making a single function work on lists, ByteStrings and Texts (and perhaps other similar representations)