Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 我怎么称呼一个也支持提升的幺半群呢?_List_Haskell_Monoids - Fatal编程技术网

List 我怎么称呼一个也支持提升的幺半群呢?

List 我怎么称呼一个也支持提升的幺半群呢?,list,haskell,monoids,List,Haskell,Monoids,我的意思是像列表一样的设备: mempty = [ ] lift x = [x] mappend = (++) 这仅仅是IsList?正如@Robin Zigmond所说,你所说的备选方案: instance Alternative [] where empty = [] (<|>) = (++) 考虑到你问题的框架,我倾向于描述你的提升 (:[]) :: a -> [a] 。。。这反映了列表是如何编码的。特别是,通用属性(如上文链接的“程序员类别理论”一

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

mempty = [ ]
lift x = [x]
mappend = (++)

这仅仅是
IsList

正如@Robin Zigmond所说,你所说的
备选方案

instance Alternative [] where
    empty = []
    (<|>) = (++)

考虑到你问题的框架,我倾向于描述你的提升

(:[]) :: a -> [a]
。。。这反映了列表是如何编码的。特别是,通用属性(如上文链接的“程序员类别理论”一章末尾的图表所示)意味着:

-- q is an arbitrary a -> m function, with m being an arbitrary monoid.
foldMap q . (:[]) = q


就类型而言,
Alternative
似乎也表达了您所寻找的内容:
empty
()
通常被认为是单像操作,而
Applicative
中的
可以作为您的提升。然而,我不确定在
pure
替代方法之间是否存在任何联系,这些方法将澄清
pure
在这种结构中的作用。(关于后一点,你可能会发现讨论
备选方案
应用性
之间关系的文章很有意思。)

为了完整起见,我应该提到,我认为
MonadTrans
提升
和我在回答中提到的自由幺半群之间有某种相似之处,因为变压器通常是某种自由结构。我在回答中没有提到它,因为这是一个远程连接,我还没有对自己说得足够清楚,以便能够很好地解释它。宇宙属性不是有更多的东西吗?首先,
foldMap f x foldMap f y=foldMap f(x y)
foldMap f mempty=mempty
foldMap
是幺半群态射)。但是还有一件事:
foldMap
的独特性。基本上说,每个
fa
都可以使用
pure
Monoid
操作来形成。@dfeur是的,还有更多。我不是,而且我仍然不是,完全确定如何将其与这个问题的背景联系起来;同时,我改变了“意味着”意味着“意味着”意味着“更好地建议它不到此为止。我并不认为它一定是一个自由的幺半群。由于我不需要投影到任何其他幺半群,它可能会随意合并元素。此外,实际上我确实希望有一个自由幺半群类,但替代方法通常是有损的:它的行为类似于
const
xy=x
——在我迄今为止处理的大多数情况下,无论是应用程序解析器(这个操作符做不对称选择)或单子(在尝试操作之前使用它)。我建议,<代码> ISStlist 是我们应该考虑的自由幺半群类,因为它见证了所有实例之间的同构(通过列表)。@ IGATATIMANROV(1)如果你的电梯在元素类型上是完全多态的(
a->ma
),我认为你不能用它进行任何折叠,除了把所有东西都发送给一些
空的
(2a)我觉得自由幺半群没有足够值得注意的编码来证明一个单独的类型类是正确的。我们所拥有的是
可折叠的
,它说的更广泛:“这可以转换为自由幺半群”(通过
toList
翻转折叠映射
备选方案
确实与我们正在考虑的其他可能性大不相同。
-- q is an arbitrary a -> m function, with m being an arbitrary monoid.
foldMap q . (:[]) = q