monoids-0.1.2: Data/Ring.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Ring
( module Data.Group
, module Data.Ring.Semi
) where
import Data.Group
import Data.Ring.Semi
class (Group a, Semiring a) => Ring a
-- todo: the Boolean Ring (with symmetric difference as addition)
-- use Data.Ring.Semi.Ord.Order Bool to get the and/or based Boolean distribuive lattice semiring
instance Monoid Bool where
mempty = False
a `mappend` b = (a || b) && not (a && b)
instance Group Bool where
gnegate = not
instance MultiplicativeMonoid Bool where
one = True
times = (&&)
instance Seminearring Bool
instance Semiring Bool
instance Ring Bool