diff options
| author | krasimir <krasimir@chalmers.se> | 2009-08-06 11:19:04 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-08-06 11:19:04 +0000 |
| commit | b180ac61a5f6fb06a43da37a82428e1f74ea75d6 (patch) | |
| tree | e4a12b5462718ee11d5659062ac7e1e603f98b03 /src/Data/Binary.hs | |
| parent | 3473f0d274fdeaa2a29bfeebacc63a6f5aaaaf9d (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.hs | 10 |
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 |
