list - 我如何称呼一个也支持提升的幺半群?

标签 list haskell monoids

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

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 讨论了 AlternativeApplicative 之间的关系很有趣。)

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

相关文章:

python - 使用列表理解查找 kwargs 中也包含某个子字符串的最大 int 值

python - 将2个不等长的列表映射到字典

haskell - 模式匹配中的 Monoid mempty

haskell - 为什么我的数据类型需要一个 Monoid 实例才能使用这个镜头?

python - 在 Python 中将两个多维列表合并为一个列表

python - 如何获得列表中没有括号的结果?

haskell - "infixl"和 "infixr"运算符的语法错误

haskell - 在 Haskell 中,变量前面的下划线是什么意思?

Haskell:解析命令行参数

haskell - 尽管在使用检查器测试幺半群定律时定义了任意实例,但没有任意实例