algebra-3.0: src/Numeric/Partial/Monoid.hs
module Numeric.Partial.Monoid
( PartialMonoid(..)
) where
import Numeric.Partial.Semigroup
import Data.Int
import Data.Word
import Numeric.Natural.Internal
class PartialSemigroup a => PartialMonoid a where
pzero :: a
instance PartialMonoid Bool where
pzero = False
instance PartialMonoid Int where
pzero = 0
instance PartialMonoid Integer where
pzero = 0
instance PartialMonoid Natural where
pzero = 0
instance PartialMonoid Int8 where
pzero = 0
instance PartialMonoid Int16 where
pzero = 0
instance PartialMonoid Int32 where
pzero = 0
instance PartialMonoid Int64 where
pzero = 0
instance PartialMonoid Word where
pzero = 0
instance PartialMonoid Word8 where
pzero = 0
instance PartialMonoid Word16 where
pzero = 0
instance PartialMonoid Word32 where
pzero = 0
instance PartialMonoid Word64 where
pzero = 0
instance PartialMonoid () where
pzero = ()
instance PartialSemigroup a => PartialMonoid (Maybe a) where
pzero = Nothing
instance (PartialMonoid a, PartialMonoid b) => PartialMonoid (a, b) where
pzero = (pzero, pzero)
instance (PartialMonoid a, PartialMonoid b, PartialMonoid c) => PartialMonoid (a, b, c) where
pzero = (pzero, pzero, pzero)
instance (PartialMonoid a, PartialMonoid b, PartialMonoid c, PartialMonoid d) => PartialMonoid (a, b, c, d) where
pzero = (pzero, pzero, pzero, pzero)
instance (PartialMonoid a, PartialMonoid b, PartialMonoid c, PartialMonoid d, PartialMonoid e) => PartialMonoid (a, b, c, d, e) where
pzero = (pzero, pzero, pzero, pzero, pzero)