[英]instance Monoid Monad
Monad
是一個幺半群,然而它的幺半群與Integer
。 我想知道是否有辦法編寫Monoid'
和Monad'
這樣Integer
和Monad'
都可以表示為同一個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的要求下將我的評論轉為答案。 這篇博客文章展示了如何使用類型多態在同一類型類下統一Monad
和Monoid
。 這與Tel的答案略有不同,因為monad在endofunctor類別中被實現為monoid,而不是Kleisli類別中的monoid。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.