import Data.Binary import Control.Monad import Data.List import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Lazy as L import System.Environment import qualified Map as M import qualified Data.Map as DM import Codec.Compression.GZip import Control.Parallel.Strategies instance NFData B.ByteString where rnf bs = bs `seq` () instance (NFData k, NFData v) => NFData (M.Map k v) where rnf = rnf . M.toList instance (Binary k, Binary v) => Binary (M.Map k v) where put m = put (M.size m) >> mapM_ put (M.toAscList m) get = do n <- get :: Get Int xs <- replicateM n get return (M.fromDistinctAscListN (map (\(k,v) -> (v `seq` k, v)) xs) n) -- return (M.fromDistinctAscList xs) main = do [f] <- getArgs m <- decode `fmap` L.readFile f -- print (rnf m `seq` DM.size (m :: DM.Map B.ByteString Int)) print (rnf m `seq` M.size (m :: M.Map B.ByteString Int)) -- print (rnf m `seq` length (m :: [(B.ByteString, Int)])) print "done"