content: module Numeric.Ring.Class
    ( Ring(..)
    , fromIntegral
    ) where
  
  import Data.Int
  import Data.Word
  import Numeric.Rig.Class
  import Numeric.Rng.Class
  import Numeric.Additive.Group
  import Numeric.Algebra.Unital
  import qualified Prelude
  import Prelude (Integral(toInteger), Integer, (.))
  
  class (Rig r, Rng r) => Ring r where
    fromInteger :: Integer -> r
    fromInteger n = times n one
  
  fromIntegral :: (Integral n, Ring r) => n -> r
  fromIntegral = fromInteger . toInteger
  
  instance Ring Integer where fromInteger = Prelude.fromInteger
  instance Ring Int     where fromInteger = Prelude.fromInteger
  instance Ring Int8    where fromInteger = Prelude.fromInteger
  instance Ring Int16   where fromInteger = Prelude.fromInteger
  instance Ring Int32   where fromInteger = Prelude.fromInteger
  instance Ring Int64   where fromInteger = Prelude.fromInteger
  instance Ring Word    where fromInteger = Prelude.fromInteger
  instance Ring Word8   where fromInteger = Prelude.fromInteger
  instance Ring Word16  where fromInteger = Prelude.fromInteger
  instance Ring Word32  where fromInteger = Prelude.fromInteger
  instance Ring Word64  where fromInteger = Prelude.fromInteger
  instance Ring () where fromInteger _ = ()
  instance (Ring a, Ring b) => Ring (a, b) where
    fromInteger n = (fromInteger n, fromInteger n)
  instance (Ring a, Ring b, Ring c) => Ring (a, b, c) where
    fromInteger n = (fromInteger n, fromInteger n, fromInteger n)
  instance (Ring a, Ring b, Ring c, Ring d) => Ring (a, b, c, d) where
    fromInteger n = (fromInteger n, fromInteger n, fromInteger n, fromInteger n)
  instance (Ring a, Ring b, Ring c, Ring d, Ring e) => Ring (a, b, c, d, e) where
    fromInteger n = (fromInteger n, fromInteger n, fromInteger n, fromInteger n, fromInteger n)
  