Data.Text
存在map,它可能是Functor
的一个实例,在编写适用于String
和Text
的通用算法时非常有用秒。有没有理由不存在这样的实例?
答案 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
的某些操作可能效率低下,因此如果您将它们用于大数据,请务必小心。)