「某處」在「標準庫中或某些小而通用的包中,使其成爲相對無害的依賴」。這些monoid實例是否已經存在?
import qualified Data.Map as M
import Data.Monoid
import Control.Applicative
newtype MMap k v = MMap {unMMap :: M.Map k v}
newtype MApplictive f a = MApplicative {unMApplicative :: f a}
-- M.unionWith f M.empty m = M.unionWith f m M.empty = m
-- f a (f b c) = f (f a b) c =>
-- M.unionWith f m1 (M.unionWith f m2 m3) =
-- M.unionWith f (M.unionWith f m1 m2) m3
instance (Ord k, Monoid v) => Monoid (MMap k v) where
mempty = MMap $ M.empty
mappend m1 m2 = MMap $ M.unionWith mappend (unMMap m1) (unMMap m2)
instance (Applicative f, Monoid a) => Monoid (MApplicative f a) where
mempty = MApplicative $ pure mempty
mappend f1 f2 = MApplicative $ liftA2 mappend (unMApplicative f1) (unMApplicative f2)
(這些情況下,應滿足幺法律 - 沒有刻意去證明它雖然合用的一個)
我這麼問是因爲我有一些使用了這兩項的和我不不想重新定義那些已經存在的東西。
我發現這個討論並沒有說明這個庫是否存在,但似乎表明它沒有:http://www.haskell.org/pipermail/libraries/2012-April/ 017747.html – Emil
'MApplicative'將完全符合monoid法則的定義:記住應用程序是_monoidal仿函數,在數學上! – leftaroundabout
他們是強大鬆散monoidal函子,確切地說! – nimish