我的意思是像列表这样的设备:

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可以当作您的选择。但是,我不确定pureAlternative方法之间是否有任何联系可以阐明pure在这种构造中的作用。 (在后一点上,您可能会发现this tangentially related question有趣,它讨论了AlternativeApplicative之间的关系。)

关于list - 如何称呼也支持举重的Monoid?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57402447/

10-09 12:26