Using the NHC.BinArray library
This document describes the York BinArray library, a library for imperative binary arrays which, although it is implemented using the Binary library, has an independent interface and can be used pretty-much without any knowledge of the Binary library at all. We present this BinArray module as an example of the use of the Binary library to build higher-level facilities, and would encourage programmers to write and publish other useful libraries in a similar manner.
module NHC.BinArray ( type BinArray , newBinArray , intoBinArray , fromBinArray , putBinArray , getBinArray ) where data BinArray a = ... newBinArray :: Binary a => Int -> a -> IO (BinArray a) intoBinArray :: Binary a => BinArray a -> a -> IO Int fromBinArray :: Binary a => BinArray a -> Int -> IO a putBinArray :: Binary a => FilePath -> BinArray a -> IO () getBinArray :: Binary a => FilePath -> IO (BinArray a)
A BinArray a is an imperative (mutable) array that holds values of type a in binary representation. It is implemented using the Binary library, but as you can see, this is largely hidden from the programmer. A BinArray can only be written to sequentially. If one attempts to read a value from an index position which has not yet been written to (or which is beyond the bounds of the array), a default value is returned.
A BinArray can be stored in a file between program runs. Reading and writing BinArrays to disk is fast. Once a BinArray has been read back from disk, it can be written to again in the usual way.
The latest updates to these pages are available on the WWW from http://www.cs.york.ac.uk/fp/nhc98/