https://github.com/kfl/readbits
Example of how to read binary data with Haskell
https://github.com/kfl/readbits
Last synced: about 1 year ago
JSON representation
Example of how to read binary data with Haskell
- Host: GitHub
- URL: https://github.com/kfl/readbits
- Owner: kfl
- Created: 2010-05-08T18:53:39.000Z (about 16 years ago)
- Default Branch: master
- Last Pushed: 2010-06-04T14:26:11.000Z (about 16 years ago)
- Last Synced: 2025-01-31T23:59:58.039Z (over 1 year ago)
- Language: Haskell
- Homepage:
- Size: 97.7 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
What is it?
===========
Example code showing how to use the ByteString library to work with binary data in Haskell. The code reads in a file as a ByteString, translate the ByteString to an internal datatype, `[Bit]`, transform the list of bits, re-packs it as a list of bytes, and write the list of bytes to a file.
How to build
------------
You can either use cabal:
$ cabal configure
$ cabal build
$ ./dist/build/readbits-hs/readbits-hs infile outfile
Or you can just use `ghc` directly:
$ ghc -O3 --make readbits.hs -o readbits-hs
$ ./readbits-hs infile outfile
How to profile
--------------
One of points that code try to illustrate is how easy it is work with lazy steams. Thus, we write the code as if we read in the whole file, but due to laziness we only use constant memory independent of the size of the input file.
How can check that code really behaves as we intend? By using the space profiler:
$ ghc -O3 --make -prof -auto-all -caf-all readbits.hs -o readbits-hs
$ ./readbits-hs +RTS -hc -p
$ hp2ps -e8in -c readbits-hs.hp && open readbits-hs.ps