Changes between Version 3 and Version 4 of NumericClasses


Ignore:
Timestamp:
Jun 21, 2007 4:22:30 PM (8 years ago)
Author:
ross@…
Comment:

whitespace only

Legend:

Unmodified
Added
Removed
Modified
  • NumericClasses

    v3 v4  
    4949{{{
    5050class AbelianGroup a where              -- could also factor out Monoid
    51         zero            :: a
    52         (+), (-)        :: a -> a -> a
    53         negate          :: a -> a
     51    zero            :: a
     52    (+), (-)        :: a -> a -> a
     53    negate          :: a -> a
    5454
    55         -- Minimal complete definition:
    56         --      zero, (+) and (negate or (-))
    57         negate x        =  zero - x
    58         x - y           =  x + negate y
     55    -- Minimal complete definition:
     56    --      zero, (+) and (negate or (-))
     57    negate x        =  zero - x
     58    x - y           =  x + negate y
    5959
    6060class AbelianGroup a => Ring a where
    61         (*)             :: a -> a -> a
    62         one             :: a
    63         fromInteger     :: Integer -> a
     61    (*)             :: a -> a -> a
     62    one             :: a
     63    fromInteger     :: Integer -> a
    6464
    65         -- Minimal complete definition:
    66         --      (*) and (one or fromInteger)
    67         one             =  fromInteger 1
    68         fromInteger n
    69           | n < 0       =  negate (fi (negate n))
    70           | otherwise   =  fi n
    71           where fi 0    =  zero
    72                 fi 1    =  one
    73                 fi n
    74                   | even n    = fin + fin
    75                   | otherwise = fin + fin + one
    76                   where fin = fi (n `div` 2)
     65    -- Minimal complete definition:
     66    --      (*) and (one or fromInteger)
     67    one             =  fromInteger 1
     68    fromInteger n
     69      | n < 0       =  negate (fi (negate n))
     70      | otherwise   =  fi n
     71      where fi 0    =  zero
     72            fi 1    =  one
     73            fi n
     74              | even n    = fin + fin
     75              | otherwise = fin + fin + one
     76              where fin = fi (n `div` 2)
    7777}}}
    7878Haskell 98 compatibility class:
    7979{{{
    8080class (Eq a, Show a, Ring a) => Num a  where
    81         abs, signum     :: a -> a
     81    abs, signum     :: a -> a
    8282}}}
    8383
     
    9898{{{
    9999class Ring a => DivisionRing a where
    100         (/)             :: a -> a -> a
    101         recip           :: a -> a
    102         fromRational    :: Rational -> a
     100    (/)             :: a -> a -> a
     101    recip           :: a -> a
     102    fromRational    :: Rational -> a
    103103
    104         -- Minimal complete definition:
    105         --      recip or (/)
    106         recip x         =  one / x
    107         x / y           =  x * recip y
    108         fromRational x  =  fromInteger (numerator x) /
    109                            fromInteger (denominator x)
     104    -- Minimal complete definition:
     105    --      recip or (/)
     106    recip x         =  one / x
     107    x / y           =  x * recip y
     108    fromRational x  =  fromInteger (numerator x) /
     109                       fromInteger (denominator x)
    110110
    111111class DivisionRing a => Field a
     
    144144{{{
    145145class Ring a => EuclideanDomain a where
    146         div, mod        :: a -> a -> a
    147         divMod          :: a -> a -> (a,a)
     146    div, mod        :: a -> a -> a
     147    divMod          :: a -> a -> (a,a)
    148148
    149         stdAssociate    :: a -> a
    150         stdUnit         :: a -> a
     149    stdAssociate    :: a -> a
     150    stdUnit         :: a -> a
    151151
    152         -- Minimal complete definition:
    153         --      (divMod or (div and mod)) and stdUnit
    154         n `divMod` d    =  (n `div` d, n `mod` d)
    155         n `div` d       =  q  where (q,r) = divMod n d
    156         n `mod` d       =  r  where (q,r) = divMod n d
    157  
    158         stdAssociate x  =  x `div` stdUnit x
     152    -- Minimal complete definition:
     153    --      (divMod or (div and mod)) and stdUnit
     154    n `divMod` d    =  (n `div` d, n `mod` d)
     155    n `div` d       =  q  where (q,r) = divMod n d
     156    n `mod` d       =  r  where (q,r) = divMod n d
     157
     158    stdAssociate x  =  x `div` stdUnit x
    159159}}}
    160160Haskell 98 compatibility class:
    161161{{{
    162162class (Real a, Enum a, EuclideanDomain a) => Integral a  where
    163         quot, rem       :: a -> a -> a
    164         quotRem         :: a -> a -> (a,a)
    165         toInteger       :: a -> Integer
     163    quot, rem       :: a -> a -> a
     164    quotRem         :: a -> a -> (a,a)
     165    toInteger       :: a -> Integer
    166166
    167         -- Minimal complete definition:
    168         --      toInteger
    169         n `quot` d      =  q  where (q,r) = quotRem n d
    170         n `rem` d       =  r  where (q,r) = quotRem n d
    171         quotRem n d     =  if signum r == - signum d then (q+one, r-d) else qr
    172           where qr@(q,r) = divMod n d
     167    -- Minimal complete definition:
     168    --      toInteger
     169    n `quot` d      =  q  where (q,r) = quotRem n d
     170    n `rem` d       =  r  where (q,r) = quotRem n d
     171    quotRem n d     =  if signum r == - signum d then (q+one, r-d) else qr
     172      where qr@(q,r) = divMod n d
    173173}}}
    174174