binary-list 0.2.0.3 → 0.2.0.4
raw patch · 3 files changed
+24/−14 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- Data/BinaryList.hs +1/−0
- Data/BinaryList/Serialize.hs +22/−13
- binary-list.cabal +1/−1
Data/BinaryList.hs view
@@ -264,6 +264,7 @@ fromListBuilderWithDefault e = go where go [] _ n = replicate n e+ go xs _ 0 = ListEnd $ Prelude.head xs -- Hopefully we can avoid this case? go xs l n = let m = n - 1 l' = 2^m
Data/BinaryList/Serialize.hs view
@@ -19,6 +19,7 @@ , encodedFromByteString ) where +import Prelude hiding (reverse) -- Binary lists import Data.BinaryList.Internal import Data.BinaryList@@ -71,8 +72,8 @@ encodeBinList :: (a -> Put) -> Direction -> BinList a -> EncodedBinList encodeBinList f d xs = EncodedBinList d (lengthIndex xs) $ if d == FromLeft- then runPut $ foldl (\y x -> y >> f x) (return ()) $ toList xs- else runPut $ foldr (\x y -> f x >> y) (return ()) $ toList xs+ then runPut $ foldr (\x y -> f x >> y) (return ()) $ toList xs+ else runPut $ foldl (\y x -> f x >> y) (return ()) $ toList xs -- | A binary list decoded, from where you can extract a binary list. If the -- decoding process fails in some point, you still will be able to retrieve@@ -118,6 +119,19 @@ Left (r,_,err) -> DecodingError err r Right (r,_,x) -> go r (ListEnd x) where+ -- | To avoid looking at the direction in each recursive step,+ -- we provide a function to append newly read data with the+ -- accumulated binary list depending on the direction. Since the+ -- new data is of the same size as the accumulated binary list,+ -- we can append them safely just by using 'ListNode'.+ --+ -- recAppend :: Int -> BinList a -> BinList a -> BinList a+ recAppend i = case d of+ FromLeft -> ListNode (i+1)+ _ -> \xs ys -> ListNode (i+1) (reverse ys) xs++ -- | Recursive decoding function.+ -- -- go :: ByteString -- ^ Input data. -- -> BinList a -- ^ Accumulated binary list. -- -> Decoded a@@ -130,20 +144,15 @@ -- the already decoded data, prepending the accumulated data as -- a partial result. else PartialResult xs $ case runGetOrFail (replicateM (2^i) f) input of- -- In case of error, we return the accumulated result- -- followed by a decoding error.+ -- In case of error, we return a decoding error. Left (r,_,err) -> DecodingError err r Right (r,_,list) ->- let -- Binary list of new data+ let -- Otherwise, we build a new binary list with the collected+ -- new data. ys = fromListBuilder list i- -- Since the new data is of the same size of the accumulated- -- binary list, we can append safely just using 'ListNode'.- -- The appending order is determined by the encoding direction.- zs = if d == FromLeft- then ListNode (i+1) xs ys- else ListNode (i+1) ys xs- -- The new list is fed to the next recursion step.- in go r zs+ -- The new list is appended with the accumulated list and fed+ -- to the next recursion step.+ in go r $ recAppend i xs ys -- | Translate an encoded binary list to a bytestring. encodedToByteString :: EncodedBinList -> ByteString
binary-list.cabal view
@@ -1,5 +1,5 @@ name: binary-list-version: 0.2.0.3+version: 0.2.0.4 synopsis: Lists of size length a power of two. description: Some algorithmic problems work only when the input list has length a power of two. This library provides with a