numhask-0.0.3: src/NumHask/Algebra/Ring.hs
{-# OPTIONS_GHC -Wall #-}
-- | Rings
-- An interesting feature of the NumHask structure is the importance of the commutative Ring ('CRing'), which is a class often needed higher up the class tree.
module NumHask.Algebra.Ring (
-- * Ring
Semiring
, Ring
, CRing
) where
import Protolude (Double, Float, Int, Integer,Bool(..))
import NumHask.Algebra.Additive
import NumHask.Algebra.Multiplicative
import NumHask.Algebra.Distribution
import Data.Complex (Complex(..))
-- | a semiring
class ( Additive a
, MultiplicativeAssociative a
, MultiplicativeUnital a
, Distribution a) =>
Semiring a
instance Semiring Double
instance Semiring Float
instance Semiring Int
instance Semiring Integer
instance Semiring Bool
instance (AdditiveGroup a, Semiring a) => Semiring (Complex a)
-- | Ring
class ( AdditiveGroup a
, MultiplicativeAssociative a
, MultiplicativeUnital a
, Distribution a) =>
Ring a
instance Ring Double
instance Ring Float
instance Ring Int
instance Ring Integer
instance (Ring a) => Ring (Complex a)
-- | CRing is a Commutative Ring. It arises often due to * being defined as only multiplicative commutative.
class ( Multiplicative a, Ring a) => CRing a
instance CRing Double
instance CRing Float
instance CRing Int
instance CRing Integer
instance (CRing a) => CRing (Complex a)