packages feed

OddWord 1.0.0 → 1.0.0.1

raw patch · 4 files changed

+44/−22 lines, 4 filesdep ~QuickCheckdep ~basePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: QuickCheck, base

API changes (from Hackage documentation)

- Data.Word.Odd: instance (Bits a, TypeNum n) => Bits (OddWord a n)
- Data.Word.Odd: instance Read a => Read (OddWord a n)
+ Data.Word.Odd: instance (Num a, Bits a, TypeNum n) => Bits (OddWord a n)
+ Data.Word.Odd: instance (Read a, Num a, Bits a, TypeNum n) => Read (OddWord a n)

Files

+ NEWS view
@@ -0,0 +1,10 @@+OddWord - Release History++release-1.0.0.1 - 2012.12.30++  * Fixed compilation with base-4.6 (GHC 7.6).+  * Fixed bug in Read instance and extended test suite.++release-1.0.0 - 2011.07.21++  * Initial release.
OddWord.cabal view
@@ -1,8 +1,8 @@ name:               OddWord-version:            1.0.0+version:            1.0.0.1 license:            BSD3 license-file:       LICENSE-copyright:          (c) 2011 Robin KAY+copyright:          (c) 2011-2012 Robin KAY author:             Robin KAY maintainer:         Robin KAY <komadori@gekkou.co.uk> synopsis:           Provides a wrapper for deriving word types with fewer bits.@@ -10,7 +10,7 @@ stability:          Stable cabal-version:      >= 1.10 build-type:         Simple-extra-source-files: test/*.hs+extra-source-files: test/*.hs NEWS homepage:           http://www.gekkou.co.uk/ description:     Provdes the 'OddWord' type, which wraps an existing integer type and@@ -23,7 +23,7 @@     default-language: Haskell2010     other-extensions: ScopedTypeVariables     build-depends:-        base >= 4 && < 5+        base >= 4.5 && < 5  Test-Suite oddword-tests     type:             exitcode-stdio-1.0@@ -32,6 +32,10 @@     default-language: Haskell2010     other-extensions: ScopedTypeVariables     build-depends:-        base       >= 4   && < 5,-        QuickCheck >= 2.4 && < 2.5,+        base       >= 4.5 && < 5,+        QuickCheck >= 2.4 && < 2.6,         OddWord    >= 1.0 && < 1.1++Source-repository head+    type:     darcs+    location: https://patch-tag.com/r/komadori/OddWord
src/Data/Word/Odd.hs view
@@ -62,9 +62,12 @@ pairOW :: (a, a) -> (OddWord a n, OddWord a n) pairOW = uncurry ((,) `on` OW) -owMask :: forall a n. (Bits a, TypeNum n) => OddWord a n+owMask :: forall a n. (Num a, Bits a, TypeNum n) => OddWord a n owMask = OW $ (flip (-) 1) $ bit $ fromTypeNum (typeNum :: TypeNumBuilder n) +maskOW :: forall a n. (Num a, Bits a, TypeNum n) => a -> OddWord a n+maskOW w = OW $ w .&. unOW (owMask :: OddWord a n)+ mapFst :: (a -> b) -> [(a, c)] -> [(b, c)] mapFst f xs = map (\(a,c) -> (f a,c)) xs @@ -73,19 +76,19 @@     show (OW x)          = show x     showList xs          = showList $ map unOW xs  -instance (Read a) => Read (OddWord a n) where-    readsPrec p s = mapFst OW $ readsPrec p s-    readList s    = mapFst (map OW) $ readList s+instance (Read a, Num a, Bits a, TypeNum n) => Read (OddWord a n) where+    readsPrec p s = mapFst maskOW $ readsPrec p s+    readList s    = mapFst (map maskOW) $ readList s  instance (Num a, Bits a, TypeNum n) => Num (OddWord a n) where-    (OW l) + (OW r) = OW $ (l + r)  .&. unOW (owMask :: OddWord a n)-    (OW l) * (OW r) = OW $ (l * r)  .&. unOW (owMask :: OddWord a n)-    (OW l) - (OW r) = OW $ (l - r)  .&. unOW (owMask :: OddWord a n)-    negate (OW x)   = OW $ negate x .&. unOW (owMask :: OddWord a n)+    (OW l) + (OW r) = maskOW $ (l + r)+    (OW l) * (OW r) = maskOW $ (l * r)+    (OW l) - (OW r) = maskOW $ (l - r)+    negate (OW x)   = maskOW $ negate x     abs w = w     signum (OW x) | x == 0    = 0                   | otherwise = 1-    fromInteger i = OW $ fromInteger i .&. unOW (owMask :: OddWord a n) +    fromInteger i = maskOW $ fromInteger i   instance (Real a, Bits a, TypeNum n) => Real (OddWord a n) where     toRational (OW x) = toRational x@@ -117,11 +120,11 @@     divMod  (OW n) (OW d) = pairOW $ divMod n d     toInteger (OW x) = toInteger x -instance (Bits a, TypeNum n) => Bits (OddWord a n) where+instance (Num a, Bits a, TypeNum n) => Bits (OddWord a n) where     (OW l) .&. (OW r) = OW $ l .&. r     (OW l) .|. (OW r) = OW $ l .|. r     xor (OW l) (OW r) = OW $ xor l r-    complement (OW x) = OW $ complement x .&. unOW (owMask :: OddWord a n)+    complement (OW x) = maskOW $ complement x     bit n | n < fromTypeNum (typeNum :: TypeNumBuilder n)           = OW $ bit n           | otherwise = OW 0@@ -135,7 +138,7 @@     testBit (OW x) n = testBit x n     bitSize _  = fromTypeNum (typeNum :: TypeNumBuilder n)     isSigned _ = False -    shiftL (OW x) n = OW $ shiftL x n .&. unOW (owMask :: OddWord a n)+    shiftL (OW x) n = maskOW $ shiftL x n     shiftR (OW x) n = OW $ shiftR x n     rotateL (OW x) n = OW $         (shiftL x n' .&. unOW (owMask :: OddWord a n)) .|. shiftR x (w-n')@@ -145,6 +148,7 @@         shiftR x n' .|. (shiftL x (w-n') .&. unOW (owMask :: OddWord a n))         where n' = n `mod` w               w  = fromTypeNum (typeNum :: TypeNumBuilder n)+    popCount (OW x) = popCount x  type Word1  = OddWord Word8             (One  ()) type Word2  = OddWord Word8        (One (Zero ()))
test/Main.hs view
@@ -14,10 +14,10 @@     Add   Integer | Mul   Integer | Sub   Integer | SubR  Integer |     Div   Integer | Mod   Integer | Quot  Integer | Rem   Integer |     DivR  Integer | ModR  Integer | QuotR Integer | RemR  Integer |-    Neg           | Abs           | Inv           |+    Neg           | Abs           | Inv           | AddDigit      |     And   Integer | Or    Integer | Xor   Integer |     ClrB  Int     | SetB  Int     | InvB  Int     |-    Shift Int     | Rot   Int+    Shift Int     | Rot   Int     | PopCnt     deriving Show  instance Arbitrary (UFunc) where@@ -37,6 +37,7 @@         return Neg,         return Abs,         return Inv,+        return AddDigit,         choose (0, 0xffff) >>= return . And,         choose (0, 0xffff) >>= return . Or,         choose (0, 0xffff) >>= return . Xor,@@ -44,7 +45,8 @@         choose (0, 32) >>= return . SetB,         choose (0, 32) >>= return . InvB,         choose (-32, 32) >>= return . Shift,-        choose (-32, 32) >>= return . Rot]+        choose (-32, 32) >>= return . Rot,+        return PopCnt]  safeDiv :: (Integral a, Bounded a) => a -> a -> a safeDiv d 0 = maxBound@@ -62,7 +64,7 @@ safeRem d 0 = 0 safeRem d n = rem d n -fromUFunc :: (Integral a, Bounded a, Bits a) => UFunc -> a -> a+fromUFunc :: (Integral a, Bounded a, Bits a, Read a, Show a) => UFunc -> a -> a fromUFunc (Add   i) x = x + (fromInteger i) fromUFunc (Mul   i) x = x * (fromInteger i) fromUFunc (Sub   i) x = x - (fromInteger i)@@ -78,6 +80,7 @@ fromUFunc  Neg      x = negate x fromUFunc  Abs      x = abs x fromUFunc  Inv      x = complement x+fromUFunc  AddDigit x = read . ('1':) $ show x fromUFunc (And   i) x = x .&. (fromInteger i) fromUFunc (Or    i) x = x .|. (fromInteger i) fromUFunc (Xor   i) x = xor x (fromInteger i)@@ -86,6 +89,7 @@ fromUFunc (InvB  n) x = complementBit x n fromUFunc (Shift n) x = shift x n fromUFunc (Rot   n) x = rotate x n+fromUFunc  PopCnt   x = fromIntegral $ popCount x  type TestWord16 = OddWord Word32 (One (Zero (Zero (Zero (Zero ())))))