由于map的存在,Data.Text
它可能是一个Functor
在编写适用于String
s 和Text
s 的通用算法时有用的实例。有没有这样的例子不存在的原因?
问问题
284 次
3 回答
10
是的,因为 aFunctor
必须是一个通用的“容器”,并且Text
只能包含Char
.
于 2013-07-14T19:12:06.810 回答
5
除了 augustss 答案之外的更一般的解释:a Functor
F
must have kind* -> *
以便提供映射a -> F a
,但 kind ofText
是*
于 2013-07-14T19:23:09.257 回答
2
Text
Functor
由于已经给出的原因,不能成为的实例。但是有一个类型类叫做ListLike
,它针对只有一种元素的数据类型,比如Text
只能包含Char
s。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 回答