content: module Numeric.Partial.Monoid
    ( PartialMonoid(..)
    ) where
  
  import Numeric.Partial.Semigroup
  import Data.Int
  import Data.Word
  import Numeric.Natural
  
  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)
  