簡體   English   中英

我如何稱呼也支持舉重的Monoid?

[英]How do I call a monoid that also supports lifting?

我的意思是像列表這樣的設備:

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

僅僅是IsList嗎?

鑒於您問題的框架,我傾向於描述您的舉升...

(:[]) :: a -> [a]

...反映了列表是Haskell類型的免費monoid編碼的方式。 特別是,通用屬性(由上面鏈接到的“ 程序員類別理論”這一章結尾的圖表說明)表示:

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

就類型而言, Alternative似乎也可以表達您的期望: empty(<|>)通常被認為是單面運算,而Applicative pure可以作為您的提升。 但是,我不確定在pureAlternative方法之間是否有任何聯系可以闡明pure在此類構造中的作用。 (在后一點上,您可能會發現這個與切線相關的問題 ,它討論了“ Alternative和“ Applicative之間的關系很有趣。)

您在談論Alternative就像@Robin Zigmond所說的那樣:

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

如果您想知道,它也是MonadPlus

instance MonadPlus []

暫無
暫無

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

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