File: Class.hs

package info (click to toggle)
haskell-algebra 2.1.1.2-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 420 kB
  • sloc: haskell: 4,758; makefile: 2
file content (41 lines) | stat: -rw-r--r-- 1,736 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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)