簡體   English   中英

例如Monoid Monad

[英]instance Monoid Monad

Monad是一個幺半群,然而它的幺半群與Integer 我想知道是否有辦法編寫Monoid'Monad'這樣IntegerMonad'都可以表示為同一個Monoid'類型類的實例?

那么,讓我們選擇一種特殊的方式Integer有一個Monoid

instance Monoid Int where
  zero = 0
  plus = (+)

現在這里是Monad Monoid

{-# LANGUAGE FlexibleInstances #-}
instance Monad m => Monoid (Kleisli m a a) where
  zero = id
  plus = (.)

而這是另一個

instance MonadPlus m => Monoid (m a) where
  zero = mzero
  plus = mplus

然而,我不確定如何在Haskell中表達“Monad是endofunctors類別中的monoid”。

我在Tikhon的要求下將我的評論轉為答案。 這篇博客文章展示了如何使用類型多態在同一類型類下統一MonadMonoid 這與Tel的答案略有不同,因為monad在endofunctor類別中被實現為monoid,而不是Kleisli類別中的monoid。

暫無
暫無

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

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