{-# LANGUAGE MultiParamTypeClasses #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Ring.Semi -- Copyright : (c) Edward Kmett 2009 -- License : BSD-style -- Maintainer : ekmett@gmail.com -- Stability : experimental -- Portability : non-portable (MPTCs) -- -- ----------------------------------------------------------------------------- module Data.Ring.Semi ( module Data.Ring.Semi.Near , SemiRing ) where import Data.Ring.Semi.Near import Data.Monoid.Self import Data.Monoid.FromString -- | A 'SemiRing' is an instance of both 'Multiplicative' and 'Monoid' where -- 'times' distributes over 'plus'. class (RightSemiNearRing a, LeftSemiNearRing a) => SemiRing a instance SemiRing r => SemiRing (Self r) instance SemiRing r => SemiRing (FromString r) instance SemiRing r => SemiRing (ReducedBy r s) instance SemiRing r => SemiRing (Dual r)