簡體   English   中英

如果“List”是一個幺半群,它的“集合”是什么?

[英]If “List” is a monoid, what is its “set”?

只需閱讀類別理論書 ,並決定將其應用於haskell。

作者將Monoid定義為:

Monoid是一個L組,配有二進制運算*:LxL-> L和L中的區分單位元素u等...

將“List”結構作為monoid,很明顯二進制運算是concat ,unit是[]

但是這里的M是什么? 我試過L = {set of all lists}但我認為這導致我遇到麻煩“L是L?” 問題,這似乎與集合有同樣的問題。

還是我想錯了什么?

編輯:正如@a​​pplicative所指出的,Haskell的列表是名為Free monoids的monoid!

不是說“List is a Monoid”,而是說“對於所有類型a,類型[a]是Monoid”更准確。 因此,對於任何特定類型a ,您的L將是L = {set of all lists of as} 根據這個定義,L當然不能包含它自己。

對於任何類型的t你可以有

L = all elements of the type [t]

然后L是使用++的瑣碎方式的幺半群。 事實上,我們在Haskell中將其形式化

class Monoid m where
   mempty  :: m
   mappend :: m -> m -> m

這是一個類型的“類”,具有形成幺半群的必要操作,所以

instance Monoid [a] where
   mempty = []
   mappend a b = a ++ b

事實上,這被稱為“免費幺半群”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM