{-# 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