summaryrefslogtreecommitdiff
path: root/src/Data/Binary.hs
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-08-06 11:19:04 +0000
committerkrasimir <krasimir@chalmers.se>2009-08-06 11:19:04 +0000
commitb180ac61a5f6fb06a43da37a82428e1f74ea75d6 (patch)
treee4a12b5462718ee11d5659062ac7e1e603f98b03 /src/Data/Binary.hs
parent3473f0d274fdeaa2a29bfeebacc63a6f5aaaaf9d (diff)
merge some changes from the latest version of Data.Binary. Makes the binary decoding faster
Diffstat (limited to 'src/Data/Binary.hs')
-rw-r--r--src/Data/Binary.hs10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/Data/Binary.hs b/src/Data/Binary.hs
index 1b287a099..786f5a09e 100644
--- a/src/Data/Binary.hs
+++ b/src/Data/Binary.hs
@@ -734,9 +734,13 @@ instance (Binary e) => Binary (IntMap.IntMap e) where
--
instance (Binary e) => Binary (Seq.Seq e) where
- -- any better way to do this?
- put = put . Fold.toList
- get = fmap Seq.fromList get
+ put s = put (Seq.length s) >> Fold.mapM_ put s
+ get = do n <- get :: Get Int
+ rep Seq.empty n get
+ where rep xs 0 _ = return $! xs
+ rep xs n g = xs `seq` n `seq` do
+ x <- g
+ rep (xs Seq.|> x) (n-1) g
#endif