我的意思是像列表这样的设备:
mempty = [ ]
lift x = [x]
mappend = (++)
仅仅是
IsList
吗? 最佳答案
鉴于您问题的框架,我倾向于描述您的举升...
(:[]) :: a -> [a]
...反映出列表是the free monoid for Haskell types的编码的方式。特别是,通用属性(由上面链接到的“程序员的类别理论”这一章结尾处的图说明)表示:
-- q is an arbitrary a -> m function, with m being an arbitrary monoid.
foldMap q . (:[]) = q
就类型而言,
Alternative
似乎也可以表达您想要的内容:empty
和(<|>)
通常被认为是等分运算,而pure
中的Applicative
可以当作您的选择。但是,我不确定pure
和Alternative
方法之间是否有任何联系可以阐明pure
在这种构造中的作用。 (在后一点上,您可能会发现this tangentially related question有趣,它讨论了Alternative
和Applicative
之间的关系。)关于list - 如何称呼也支持举重的Monoid?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57402447/