precursor-0.1.0.0: src/Precursor/Algebra/Ring.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE DefaultSignatures #-}
module Precursor.Algebra.Ring where
import qualified Prelude
import Precursor.Algebra.Semiring
import Data.Int (Int, Int16, Int32, Int64, Int8)
import GHC.Float (Double, Float)
-- | A 'Ring' is a 'Semiring' with an additive inverse, such that:
--
-- * @∀ r. r ∈ 'Ring' ∃ i. r '-' i = 'zero'@
class Semiring a => Ring a where
infixl 6 -
-- | A binary operation such that:
--
-- * @∀ r. r ∈ 'Ring' ∃ i. r '-' i = 'zero'@
(-) :: a -> a -> a
default (-) :: Prelude.Num a => a -> a -> a
(-) = (Prelude.-)
instance Ring Int
instance Ring Int8
instance Ring Int16
instance Ring Int32
instance Ring Int64
instance Ring Prelude.Integer
instance Ring Float
instance Ring Double