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