algebra-0.1.0: Numeric/Band/Class.hs
module Numeric.Band.Class
(
-- * Multiplicative Bands
Band
, pow1pBand
, powBand
) where
import Numeric.Semigroup.Multiplicative
import Numeric.Monoid.Multiplicative
import Numeric.Natural
-- | An multiplicative semigroup with idempotent multiplication.
--
-- > a * a = a
class Multiplicative r => Band r
pow1pBand :: Whole n => r -> n -> r
pow1pBand r _ = r
powBand :: (Unital r, Whole n) => r -> n -> r
powBand _ 0 = one
powBand r _ = r
instance Band ()
instance Band Bool
instance (Band a, Band b) => Band (a,b)
instance (Band a, Band b, Band c) => Band (a,b,c)
instance (Band a, Band b, Band c, Band d) => Band (a,b,c,d)
instance (Band a, Band b, Band c, Band d, Band e) => Band (a,b,c,d,e)