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