[Haskell-cafe] two problems with Data.Binary and Data.ByteString
Don Stewart
dons at galois.com
Tue Aug 12 20:32:31 EDT 2008
newsham:
> >so that fromAscList's the result of parsing the map as a list, via,
> >
> > instance Binary a => Binary [a] where
> > put l = put (length l) >> mapM_ put l
> > get = do n <- get :: Get Int
> > replicateM n get
> >
> >so that's a length-prefixed list, strictly. Which is possibly where the
> >stack's being consumed. Does just bumping the stack size a bit help?
>
> ugh.. length prefix..
> I could bump the stack size to fix my immediate situation, but my goal
> is to have a server with a huge in-memory data set, and my test data
> so far is quite small.
>
> >Alternatively, you could consider serialising the Map in some other
> >format (i.e. newtype the list, and serialise that say, in a lazy/chunked
> >encoding).
>
> hackery :(
> but that sounds like the obvious fix.
Not hackery, just a different encoding. The default Binary encodings
don't work cover all use cases and all scales. To hit other sweet spots,
use your own instances.
> >> Log: savedState.bin: openFile: resource busy (file is locked)
> >>
> >>this does not occur if the program wasnt loaded. My best guess here
> >>is that B.readFile isnt completing and closing the file for some
> >>reason. Is there a good way to force this?
> >
> >Lazy IO. So force the result to be evaluated, and then close the handle,
> >or use strict bytestring reading.
>
> There is no visible handle. It's all hidden in readFile.
> I will try forcing the data.
So you can decode using openFile, hGet and hClose on strict bytetrings,
or force the data.
-- Don
More information about the Haskell-Cafe
mailing list