numhask-0.2.0.0: src/NumHask/Algebra/Basis.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# OPTIONS_GHC -Wall #-}
-- | Element-by-element operations
module NumHask.Algebra.Basis
( AdditiveBasis(..)
, AdditiveGroupBasis(..)
, MultiplicativeBasis(..)
, MultiplicativeGroupBasis(..)
) where
import NumHask.Algebra.Additive
import NumHask.Algebra.Multiplicative
-- | element by element addition
--
-- > (a .+. b) .+. c == a .+. (b .+. c)
-- > zero .+. a = a
-- > a .+. zero = a
-- > a .+. b == b .+. a
class (Additive a) =>
AdditiveBasis m a where
infixl 7 .+.
(.+.) :: m a -> m a -> m a
-- | element by element subtraction
--
-- > a .-. a = singleton zero
class (AdditiveGroup a) =>
AdditiveGroupBasis m a where
infixl 6 .-.
(.-.) :: m a -> m a -> m a
-- | element by element multiplication
--
-- > (a .*. b) .*. c == a .*. (b .*. c)
-- > singleton one .*. a = a
-- > a .*. singelton one = a
-- > a .*. b == b .*. a
class (Multiplicative a) =>
MultiplicativeBasis m a where
infixl 7 .*.
(.*.) :: m a -> m a -> m a
-- | element by element division
--
-- > a ./. a == singleton one
class (MultiplicativeGroup a) =>
MultiplicativeGroupBasis m a where
infixl 7 ./.
(./.) :: m a -> m a -> m a