3

由于map的存在,Data.Text它可能是一个Functor在编写适用于Strings 和Texts 的通用算法时有用的实例。有没有这样的例子不存在的原因?

4

3 回答 3

10

是的,因为 aFunctor必须是一个通用的“容器”,并且Text只能包含Char.

于 2013-07-14T19:12:06.810 回答
5

除了 augustss 答案之外的更一般的解释:a Functor Fmust have kind* -> *以便提供映射a -> F a,但 kind ofText*

于 2013-07-14T19:23:09.257 回答
2

TextFunctor由于已经给出的原因,不能成为的实例。但是有一个类型类叫做ListLike,它针对只有一种元素的数据类型,比如Text只能包含Chars。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操作可能效率低下,因此如果您将它们用于大数据,请小心。)

请参阅使单个函数适用于列表、字节字符串和文本(可能还有其他类似的表示形式)

于 2013-07-15T00:16:40.607 回答