packages feed

nats 0.1 → 0.1.2

raw patch · 3 files changed

+59/−5 lines, 3 files

Files

nats.cabal view
@@ -1,15 +1,15 @@ name:          nats category:      Numeric, Algebra-version:       0.1+version:       0.1.2 license:       BSD3-cabal-version: >= 1.10+cabal-version: >= 1.8 license-file:  LICENSE author:        Edward A. Kmett maintainer:    Edward A. Kmett <ekmett@gmail.com> stability:     provisional homepage:      http://github.com/ekmett/nats/ bug-reports:   http://github.com/ekmett/nats/issues-copyright:     Copyright (C) 2011 Edward A. Kmett+copyright:     Copyright (C) 2011-2013 Edward A. Kmett synopsis:      Haskell 98 natural numbers description:     Haskell 98 natural numbers@@ -27,11 +27,9 @@   location: git://github.com/ekmett/nats.git  library-  default-language: Haskell98   hs-source-dirs: src    if !impl(hugs)-    other-extensions: DeriveDataTypeable     cpp-options: -DLANGUAGE_DeriveDataTypeable    build-depends: base >= 2 && < 10
src/Numeric/Natural.hs view
@@ -14,6 +14,7 @@ module Numeric.Natural   ( Natural   , Whole(toNatural)+  , natural   ) where  import Numeric.Natural.Internal
src/Numeric/Natural/Internal.hs view
@@ -23,6 +23,7 @@ module Numeric.Natural.Internal   ( Natural(..)   , Whole(..)+  , natural   ) where  import Data.Word@@ -41,6 +42,12 @@ #endif   ) +-- | Church decoding+natural :: a -> (a -> a) -> Natural -> a+natural a _ 0 = a+natural a f n = natural (f a) f (unsafePred n)+{-# INLINEABLE natural #-}+ instance Show Natural where   showsPrec d (Natural n) = showsPrec d n @@ -49,57 +56,93 @@  instance Num Natural where   Natural n + Natural m = Natural (n + m)+  {-# INLINE (+) #-}   Natural n * Natural m = Natural (n * m)+  {-# INLINE (*) #-}   Natural n - Natural m | result < 0 = error "Natural.(-): negative result"                         | otherwise  = Natural result     where result = n - m+  {-# INLINE (-) #-}   abs (Natural n) = Natural n+  {-# INLINE abs #-}   signum (Natural n) = Natural (signum n)+  {-# INLINE signum #-}   fromInteger n     | n >= 0 = Natural n     | otherwise = error "Natural.fromInteger: negative"+  {-# INLINE fromInteger #-}  instance Bits Natural where   Natural n .&. Natural m = Natural (n .&. m)+  {-# INLINE (.&.) #-}   Natural n .|. Natural m = Natural (n .|. m)+  {-# INLINE (.|.) #-}   xor (Natural n) (Natural m) = Natural (xor n m)+  {-# INLINE xor #-}   complement _ = error "Bits.complement: Natural complement undefined"+  {-# INLINE complement #-}   shift (Natural n) = Natural . shift n+  {-# INLINE shift #-}   rotate (Natural n) = Natural . rotate n+  {-# INLINE rotate #-}   bit = Natural . bit+  {-# INLINE bit #-}   setBit (Natural n) = Natural . setBit n+  {-# INLINE setBit #-}   clearBit (Natural n) = Natural . clearBit n+  {-# INLINE clearBit #-}   complementBit (Natural n) = Natural . complementBit n+  {-# INLINE complementBit #-}   testBit = testBit . runNatural+  {-# INLINE testBit #-}   bitSize = bitSize . runNatural+  {-# INLINE bitSize #-}   isSigned _ = False+  {-# INLINE isSigned #-}   shiftL (Natural n) = Natural . shiftL n+  {-# INLINE shiftL #-}   shiftR (Natural n) = Natural . shiftR n+  {-# INLINE shiftR #-}   rotateL (Natural n) = Natural . rotateL n+  {-# INLINE rotateL #-}   rotateR (Natural n) = Natural . rotateR n+  {-# INLINE rotateR #-} #if MIN_VERSION_base(4,6,0)   popCount = popCountDefault+  {-# INLINE popCount #-} #endif  instance Real Natural where   toRational (Natural a) = toRational a+  {-# INLINE toRational #-}  instance Enum Natural where   pred (Natural 0) = error "Natural.pred: 0"   pred (Natural n) = Natural (pred n)+  {-# INLINE pred #-}   succ (Natural n) = Natural (succ n)+  {-# INLINE succ #-}   fromEnum (Natural n) = fromEnum n+  {-# INLINE fromEnum #-}   toEnum n | n < 0     = error "Natural.toEnum: negative"            | otherwise = Natural (toEnum n)+  {-# INLINE toEnum #-}  instance Integral Natural where   quot (Natural a) (Natural b) = Natural (quot a b)+  {-# INLINE quot #-}   rem (Natural a) (Natural b) = Natural (rem a b)+  {-# INLINE rem #-}   div (Natural a) (Natural b) = Natural (div a b)+  {-# INLINE div #-}   mod (Natural a) (Natural b) = Natural (mod a b)+  {-# INLINE mod #-}   divMod (Natural a) (Natural b) = (Natural q, Natural r) where (q,r) = divMod a b+  {-# INLINE divMod #-}   quotRem (Natural a) (Natural b) = (Natural q, Natural r) where (q,r) = quotRem a b+  {-# INLINE quotRem #-}   toInteger = runNatural+  {-# INLINE toInteger #-}  -- | A refinement of 'Integral' to represent types that do not contain negative numbers. class Integral n => Whole n where@@ -109,23 +152,35 @@ instance Whole Word where   toNatural = Natural . toInteger   unsafePred n = n - 1+  {-# INLINE toNatural #-}+  {-# INLINE unsafePred #-}  instance Whole Word8 where   toNatural = Natural . toInteger   unsafePred n = n - 1+  {-# INLINE toNatural #-}+  {-# INLINE unsafePred #-}  instance Whole Word16 where   toNatural = Natural . toInteger   unsafePred n = n - 1+  {-# INLINE toNatural #-}+  {-# INLINE unsafePred #-}  instance Whole Word32 where   toNatural = Natural . toInteger   unsafePred n = n - 1+  {-# INLINE toNatural #-}+  {-# INLINE unsafePred #-}  instance Whole Word64 where   toNatural = Natural . toInteger   unsafePred n = n - 1+  {-# INLINE toNatural #-}+  {-# INLINE unsafePred #-}  instance Whole Natural where   toNatural = id   unsafePred (Natural n) = Natural (n - 1)+  {-# INLINE toNatural #-}+  {-# INLINE unsafePred #-}