data-sword 0.1.1 → 0.2
raw patch · 6 files changed
+58/−37 lines, 6 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
+ Data.ShortWord: aWord2 :: Proxy Word2
+ Data.ShortWord: aWord24 :: Proxy Word24
+ Data.ShortWord: aWord3 :: Proxy Word3
+ Data.ShortWord: aWord4 :: Proxy Word4
+ Data.ShortWord: aWord48 :: Proxy Word48
+ Data.ShortWord: aWord5 :: Proxy Word5
+ Data.ShortWord: aWord6 :: Proxy Word6
+ Data.ShortWord: aWord7 :: Proxy Word7
+ Data.ShortWord: anInt2 :: Proxy Int2
+ Data.ShortWord: anInt24 :: Proxy Int24
+ Data.ShortWord: anInt3 :: Proxy Int3
+ Data.ShortWord: anInt4 :: Proxy Int4
+ Data.ShortWord: anInt48 :: Proxy Int48
+ Data.ShortWord: anInt5 :: Proxy Int5
+ Data.ShortWord: anInt6 :: Proxy Int6
+ Data.ShortWord: anInt7 :: Proxy Int7
+ Data.ShortWord: data Int3
+ Data.ShortWord: data Int5
+ Data.ShortWord: data Int6
+ Data.ShortWord: data Word3
+ Data.ShortWord: data Word5
+ Data.ShortWord: data Word6
+ Data.ShortWord: instance Data.BinaryWord.BinaryWord Data.ShortWord.Int3
+ Data.ShortWord: instance Data.BinaryWord.BinaryWord Data.ShortWord.Int5
+ Data.ShortWord: instance Data.BinaryWord.BinaryWord Data.ShortWord.Int6
+ Data.ShortWord: instance Data.BinaryWord.BinaryWord Data.ShortWord.Word3
+ Data.ShortWord: instance Data.BinaryWord.BinaryWord Data.ShortWord.Word5
+ Data.ShortWord: instance Data.BinaryWord.BinaryWord Data.ShortWord.Word6
+ Data.ShortWord: instance Data.Bits.Bits Data.ShortWord.Int3
+ Data.ShortWord: instance Data.Bits.Bits Data.ShortWord.Int5
+ Data.ShortWord: instance Data.Bits.Bits Data.ShortWord.Int6
+ Data.ShortWord: instance Data.Bits.Bits Data.ShortWord.Word3
+ Data.ShortWord: instance Data.Bits.Bits Data.ShortWord.Word5
+ Data.ShortWord: instance Data.Bits.Bits Data.ShortWord.Word6
+ Data.ShortWord: instance Data.Bits.FiniteBits Data.ShortWord.Int3
+ Data.ShortWord: instance Data.Bits.FiniteBits Data.ShortWord.Int5
+ Data.ShortWord: instance Data.Bits.FiniteBits Data.ShortWord.Int6
+ Data.ShortWord: instance Data.Bits.FiniteBits Data.ShortWord.Word3
+ Data.ShortWord: instance Data.Bits.FiniteBits Data.ShortWord.Word5
+ Data.ShortWord: instance Data.Bits.FiniteBits Data.ShortWord.Word6
+ Data.ShortWord: instance Data.Data.Data Data.ShortWord.Int3
+ Data.ShortWord: instance Data.Data.Data Data.ShortWord.Int5
+ Data.ShortWord: instance Data.Data.Data Data.ShortWord.Int6
+ Data.ShortWord: instance Data.Data.Data Data.ShortWord.Word3
+ Data.ShortWord: instance Data.Data.Data Data.ShortWord.Word5
+ Data.ShortWord: instance Data.Data.Data Data.ShortWord.Word6
+ Data.ShortWord: instance Data.Hashable.Class.Hashable Data.ShortWord.Int3
+ Data.ShortWord: instance Data.Hashable.Class.Hashable Data.ShortWord.Int5
+ Data.ShortWord: instance Data.Hashable.Class.Hashable Data.ShortWord.Int6
+ Data.ShortWord: instance Data.Hashable.Class.Hashable Data.ShortWord.Word3
+ Data.ShortWord: instance Data.Hashable.Class.Hashable Data.ShortWord.Word5
+ Data.ShortWord: instance Data.Hashable.Class.Hashable Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Arr.Ix Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Arr.Ix Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Arr.Ix Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Arr.Ix Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Arr.Ix Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Arr.Ix Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Classes.Eq Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Classes.Eq Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Classes.Eq Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Classes.Eq Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Classes.Eq Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Classes.Eq Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Classes.Ord Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Classes.Ord Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Classes.Ord Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Classes.Ord Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Classes.Ord Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Classes.Ord Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Enum.Bounded Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Enum.Bounded Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Enum.Bounded Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Enum.Bounded Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Enum.Bounded Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Enum.Bounded Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Enum.Enum Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Enum.Enum Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Enum.Enum Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Enum.Enum Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Enum.Enum Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Enum.Enum Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Num.Num Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Num.Num Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Num.Num Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Num.Num Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Num.Num Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Num.Num Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Read.Read Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Read.Read Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Read.Read Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Read.Read Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Read.Read Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Read.Read Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Real.Integral Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Real.Integral Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Real.Integral Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Real.Integral Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Real.Integral Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Real.Integral Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Real.Real Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Real.Real Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Real.Real Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Real.Real Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Real.Real Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Real.Real Data.ShortWord.Word6
+ Data.ShortWord: instance GHC.Show.Show Data.ShortWord.Int3
+ Data.ShortWord: instance GHC.Show.Show Data.ShortWord.Int5
+ Data.ShortWord: instance GHC.Show.Show Data.ShortWord.Int6
+ Data.ShortWord: instance GHC.Show.Show Data.ShortWord.Word3
+ Data.ShortWord: instance GHC.Show.Show Data.ShortWord.Word5
+ Data.ShortWord: instance GHC.Show.Show Data.ShortWord.Word6
- Data.ShortWord.TH: mkShortWord :: String -> String -> String -> String -> Name -> Int -> [Name] -> Q [Dec]
+ Data.ShortWord.TH: mkShortWord :: String -> String -> String -> String -> String -> String -> Name -> Int -> [Name] -> Q [Dec]
Files
- README.md +3/−0
- data-sword.cabal +4/−4
- src/Data/ShortWord.hs +33/−6
- src/Data/ShortWord/TH.hs +17/−21
- tests/Tests.hs +0/−5
- tests/Types.hs +1/−1
README.md view
@@ -1,5 +1,8 @@ Data-SWord ==========++[](http://hackage.haskell.org/package/data-sword)+ This package provides Template Haskell utilities for declaring short binary word data types built on top of longer binary word data types. Signed and unsigned 2, 4, 7, 24, and 48-bit types are predefined.
data-sword.cabal view
@@ -1,12 +1,12 @@ Name: data-sword-Version: 0.1.1+Version: 0.2 Category: Data Stability: experimental Synopsis: Shorter binary words Description: This package provides Template Haskell utilities for declaring short binary word data types built on top of longer binary word data types. Signed and- unsigned 2, 4, 7, 24, and 48-bit types are predefined.+ unsigned 2, 3, 4, 5, 6, 7, 24, and 48-bit types are predefined. Homepage: https://github.com/mvv/data-sword Bug-Reports: https://github.com/mvv/data-sword/issues@@ -29,7 +29,7 @@ Library Default-Language: Haskell2010- Build-Depends: base >= 4.6 && < 5+ Build-Depends: base >= 4.7 && < 5 , template-haskell , hashable >= 1.1 , data-bword >= 0.1@@ -42,7 +42,7 @@ Test-Suite tests Default-Language: Haskell2010 Type: exitcode-stdio-1.0- Build-Depends: base >= 4.6 && < 5+ Build-Depends: base , tasty >= 0.8 , tasty-quickcheck >= 0.8 , data-sword
src/Data/ShortWord.hs view
@@ -3,27 +3,54 @@ {-# LANGUAGE TypeFamilies #-} -- | This module provides signed and unsigned binary word data types of sizes--- 2, 4, 7, 24, and 48 bits.+-- 2, 3, 4, 5, 6, 7, 24, and 48 bits. module Data.ShortWord ( module Data.BinaryWord , Word2+ , aWord2+ , Word3+ , aWord3 , Word4+ , aWord4+ , Word5+ , aWord5+ , Word6+ , aWord6 , Word7+ , aWord7 , Word24+ , aWord24 , Word48+ , aWord48 , Int2+ , anInt2+ , Int3+ , anInt3 , Int4+ , anInt4+ , Int5+ , anInt5+ , Int6+ , anInt6 , Int7+ , anInt7 , Int24+ , anInt24 , Int48+ , anInt48 ) where import Data.Word import Data.BinaryWord import Data.ShortWord.TH -mkShortWord "Word2" "Word2" "Int2" "Int2" ''Word8 2 []-mkShortWord "Word4" "Word4" "Int4" "Int4" ''Word8 4 []-mkShortWord "Word7" "Word7" "Int7" "Int7" ''Word8 7 []-mkShortWord "Word24" "Word24" "Int24" "Int24" ''Word32 24 []-mkShortWord "Word48" "Word48" "Int48" "Int48" ''Word64 48 []+mkShortWord "Word2" "Word2" "aWord2" "Int2" "Int2" "anInt2" ''Word8 2 []+mkShortWord "Word3" "Word3" "aWord3" "Int3" "Int3" "anInt3" ''Word8 3 []+mkShortWord "Word4" "Word4" "aWord4" "Int4" "Int4" "anInt4" ''Word8 4 []+mkShortWord "Word5" "Word5" "aWord5" "Int5" "Int5" "anInt5" ''Word8 5 []+mkShortWord "Word6" "Word6" "aWord6" "Int6" "Int6" "anInt6" ''Word8 6 []+mkShortWord "Word7" "Word7" "aWord7" "Int7" "Int7" "anInt7" ''Word8 7 []+mkShortWord "Word24" "Word24" "aWord24" "Int24" "Int24" "anInt24"+ ''Word32 24 []+mkShortWord "Word48" "Word48" "aWord48" "Int48" "Int48" "anInt48"+ ''Word64 48 []
src/Data/ShortWord/TH.hs view
@@ -10,11 +10,10 @@ import GHC.Arr (Ix(..)) import GHC.Enum (succError, predError, toEnumError) import Data.Data+import Data.Proxy (Proxy(..)) import Data.Ratio ((%)) import Data.Bits (Bits(..))-#if MIN_VERSION_base(4,7,0) import Data.Bits (FiniteBits(..))-#endif #if MIN_VERSION_hashable(1,2,0) import Data.Hashable (Hashable(..), hashWithSalt) #else@@ -34,28 +33,33 @@ -- 'Hashable', 'Ix', 'Bits', 'BinaryWord'. mkShortWord ∷ String -- ^ Unsigned variant type name → String -- ^ Unsigned variant constructor name+ → String -- ^ Unsigned variant proxy name → String -- ^ Signed variant type name → String -- ^ Signed variant constructor name+ → String -- ^ Signed variant proxy name → Name -- ^ The underlying (unsigned) type → Int -- ^ The bit length → [Name] -- ^ List of instances for automatic derivation → Q [Dec]-mkShortWord un uc sn sc utp bl ad =- (++) <$> mkShortWord' False un' uc' sn' sc' utp bl ad- <*> mkShortWord' True sn' sc' un' uc' utp bl ad- where un' = mkName un- uc' = mkName uc- sn' = mkName sn- sc' = mkName sc+mkShortWord un uc upn sn sc spn utp bl ad =+ (++) <$> mkShortWord' False un' uc' upn' sn' sc' utp bl ad+ <*> mkShortWord' True sn' sc' spn' un' uc' utp bl ad+ where un' = mkName un+ uc' = mkName uc+ upn' = mkName upn+ sn' = mkName sn+ sc' = mkName sc+ spn' = mkName spn mkShortWord' ∷ Bool → Name → Name+ → Name → Name → Name → Name → Int → [Name] → Q [Dec]-mkShortWord' signed tp cn otp ocn utp bl ad = returnDecls $+mkShortWord' signed tp cn pn otp ocn utp bl ad = returnDecls $ [ NewtypeD [] tp [] #if MIN_VERSION_template_haskell(2,11,0) Nothing@@ -70,6 +74,8 @@ #else (union [''Typeable] ad) #endif+ , SigD pn (AppT (ConT ''Proxy) tpT)+ , fun pn $ ConE 'Proxy , inst ''Eq [tp] $ {- (W x) == (W y) = x == y -} [ funUn2 '(==) $ appVN '(==) [x, y]@@ -337,11 +343,9 @@ {- bitSize _ = SIZE -} [ fun_ 'bitSize $ sizeE , inline 'bitSize-#if MIN_VERSION_base(4,7,0) {- bitSizeMaybe _ = Just SIZE -} , fun_ 'bitSizeMaybe $ app (ConE 'Just) [sizeE] , inline 'bitSizeMaybe-#endif {- isSigned _ = SIGNED -} , fun_ 'isSigned $ ConE $ if signed then 'True else 'False , inline 'isSigned@@ -412,7 +416,6 @@ , funUn 'popCount $ appVN 'popCount [x] , inline 'popCount ]-#if MIN_VERSION_base(4,7,0) , inst ''FiniteBits [tp] {- finiteBitSize _ = SIZE -} [ fun_ 'finiteBitSize $ sizeE@@ -426,7 +429,6 @@ , inline 'countTrailingZeros # endif ]-#endif , inst ''BinaryWord [tp] [ tySynInst ''UnsignedWord [tpT] $ ConT $ if signed then otp else tp@@ -610,13 +612,7 @@ litS = LitE . StringL sizeE = litI $ toInteger bl shiftE = appV '(-)- [ appV-#if MIN_VERSION_base(4,7,0)- 'finiteBitSize -#else- 'bitSize -#endif- [SigE (VarE 'undefined) uT]+ [ appV 'finiteBitSize [SigE (VarE 'undefined) uT] , sizeE ] maskE = appV 'shiftL [VarE 'allOnes, shiftE] returnDecls ds = do
tests/Tests.hs view
@@ -1,5 +1,4 @@ {-# LANGUAGE UnicodeSyntax #-}-{-# LANGUAGE CPP #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-}@@ -36,10 +35,6 @@ $ testGroup "Tests" [ isoTestGroup "Word64/16" (0 ∷ U16) , isoTestGroup "Int64/16" (0 ∷ I16) ]--#if !MIN_VERSION_base(4,7,0)-finiteBitSize = bitSize-#endif isoTestGroup name t = testGroup name
tests/Types.hs view
@@ -6,4 +6,4 @@ import Data.Word import Data.ShortWord.TH -mkShortWord "U16" "U16" "I16" "I16" ''Word64 16 []+mkShortWord "U16" "U16" "aU16" "I16" "I16" "anI16" ''Word64 16 []