据我了解Foldable
基本上代表有许多可遍历,即列表,地图,套相同类型的要素结构等哈斯克尔:“追加”类型的类
是否有类似Appendable
或Insertable
它基本上代表结构可以添加元素?当然,不能保证检索元素的顺序。
如果已经有一个,我宁愿不创建一个类。
据我了解Foldable
基本上代表有许多可遍历,即列表,地图,套相同类型的要素结构等哈斯克尔:“追加”类型的类
是否有类似Appendable
或Insertable
它基本上代表结构可以添加元素?当然,不能保证检索元素的顺序。
如果已经有一个,我宁愿不创建一个类。
你应该看看Data.Collections包。它包含类型类使用以下方法:
class Unfoldable c i | c -> i where
insert :: i -> c -> c
empty :: c
singleton :: i -> c
它还提供insertMany
和insertManySorted
方法,所有从一个Foldable
的元素插入到一个。
如果您将您的类型设置为Foldable
和的实例,那么您既可以插入也可以从中检索元素。
我认为插入本身并不是一个明智的概念。有更好的方法来概括这一点。例如Alternative
是一个合理的类型。您可以获得pure
单身人士和一些通用工会以<|>
的形式进行操作。
是否有像
Appendable
或Insertable
这样的类,它基本上代表了可以添加元素的结构?
你想更清楚你的意思是“添加元素”。因为有两个方面,这可以去:
class Insertable c where
-- Add one element to the collection.
insert :: a -> c a -> c a
class Appendable c where
-- Append a collection to another.
append :: c a -> c a -> c a
后者,你会注意到,除非你添加一个操作这样的不支持添加一个孤独a
到集合:
class Pointed c where
singleton :: a -> c a
注意如果你有Appendable
和Pointed
情况下,你可以定义一个Insertable
:
instance (Appendable c, Pointed c) => Insertable c where
insert x xs = append (singleton x) xs
的Insertable
类,以及用于实际访问集合的元素的操作(例如, Foldable
类)也可以用来定义一个Appendable
实例。
在任何情况下,我的模拟Appendable
上面的类真的只是Monoid
变相。同样可以将我的Insertable
视为Chris Taylor建议的类的变形版本。尽管如此,我还是选择了Collection
这个类,它将和Foldable
结合起来。
对于“真的只是Monoid”+1。 Appendable类不会在IMO上添加任何内容,除非我错过了某些东西。 – 2012-07-11 20:13:23