Haskell 哈斯凯尔:“这是一个很好的例子。”;附加“;类型类
据我所知,基本上表示具有许多相同类型的元素的结构,这些元素可以被迭代,即列表、映射、集等 有没有像Haskell 哈斯凯尔:“这是一个很好的例子。”;附加“;类型类,haskell,typeclass,Haskell,Typeclass,据我所知,基本上表示具有许多相同类型的元素的结构,这些元素可以被迭代,即列表、映射、集等 有没有像appendeable或Insertable这样的类,它基本上表示可以向其中添加元素的结构?当然,无法保证检索元素的顺序 如果已经有一个类,我不希望自己创建它。您应该看看这个包。它包含具有以下方法的可展开的类型类: class Unfoldable c i | c -> i where insert :: i -> c -> c empty :: c singleton
appendeable
或Insertable
这样的类,它基本上表示可以向其中添加元素的结构?当然,无法保证检索元素的顺序
如果已经有一个类,我不希望自己创建它。您应该看看这个包。它包含具有以下方法的可展开的类型类:
class Unfoldable c i | c -> i where
insert :: i -> c -> c
empty :: c
singleton :: i -> c
它还提供了insertMany
和insertManySorted
方法,将可折叠的中的所有元素插入可展开的中
如果您将您的类型设置为可折叠和可展开的实例,那么您可以从中插入和检索元素。我认为插入本身并不是一个明智的概念。有更好的方法来概括这一点。例如,Alternative
是一个合理的类型类。对于单例和一些形式为
的泛型联合操作,您可以得到pure
有没有像appendeable
或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
请注意,如果您有可追加的
和指向的
实例,则可以定义一个可插入的
:
instance (Appendable c, Pointed c) => Insertable c where
insert x xs = append (singleton x) xs
Insertable
类,以及用于实际访问集合元素的操作(例如Foldable
类),同样可以用于定义Appendable
实例
无论如何,我上面的mockappendeable
类实际上只是伪装而已。我的Insertable
同样可以看作是Chris Taylor建议的unbovable
类的伪装版本。不过,我还是要使用这个包中的类,它将可展开的
与可折叠的
+1结合起来,表示“真的只是幺半群”。可追加类不会在上面添加任何内容,除非我遗漏了什么。