我的意思是像列表一样的设备:
mempty = [ ]
lift x = [x]
mappend = (++)
仅仅是IsList
吗?
最佳答案
鉴于你的问题的框架,我倾向于描述你的电梯......
(:[]) :: a -> [a]
...反射(reflect)列表如何编码 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 - 我如何称呼一个也支持提升的幺半群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57402447/