module Numeric.Rng.Class
  ( Rng
  ) where

import Numeric.Group.Additive
import Numeric.Semiring
import Data.Int
import Data.Word

-- | A Ring without an /i/dentity.

class (AdditiveGroup r, Semiring r) => Rng r where
instance Rng Integer
instance Rng Int
instance Rng Int8
instance Rng Int16
instance Rng Int32
instance Rng Int64
instance Rng Word
instance Rng Word8
instance Rng Word16
instance Rng Word32
instance Rng Word64
instance Rng ()
instance (Rng a, Rng b) => Rng (a, b)
instance (Rng a, Rng b, Rng c) => Rng (a, b, c)
instance (Rng a, Rng b, Rng c, Rng d) => Rng (a, b, c, d)
instance (Rng a, Rng b, Rng c, Rng d, Rng e) => Rng (a, b, c, d, e)