monoids-0.1.25: Data/Ring/Semi.hs
{-# 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)