I usually use the the Binary class, found in NewBinary for this task. You derive Binary for each type you wish to serialise, which gives you a get and put function on handles. A stripped down version suitable for many tasks lives here: http://www.cse.unsw.edu.au/~dons/code/hmp3/Binary.hs
This is the same class GHC uses to read and write .hi files. Some info on this at http://www.haskell.org/hawiki/BinaryIo, and ftp://ftp.cs.york.ac.uk/pub/malcolm/ismm98.html Examples of a persistent database here: http://www.cse.unsw.edu.au/~dons/code/hmp3/Tree.hs and here http://www.cse.unsw.edu.au/~dons/code/lambdabot/Plugins/Seen.hs I actually think a derivable class Binary is simple and solid enough it should be in the standard libs.. -- Don mmm92: > Hi all, > > I have some program data that I'd like to persist. I could just > use read and show and file I/O to store arrays as files. [1] This > works and it is easy and simple (which I like) but it is also > inefficient and a little cumbersome. > > I imagine that this is a very common task, and I know of utilities > in other environments like object databases, embedded databases, XML > persistence, etc. that can make this kind of persistence simple *and* > relatively efficient and reliable. E.g.) I have found the HSQLDB > embedded database [2] to be useful when writing Java applications. > What do you do for quick and easy persistence in Haskell? Are there > any libraries or techniques that are especially useful for this? > > [1] > > type SimpleRecord = (Integer, Integer, Integer) > > type SimpleIndex = Integer > > type SimpleDB = (Array SimpleIndex SimpleRecord, FilePath) > > > loadDB :: FilePath -> IO SimpleDB > > loadDB f = do h <- openFile f ReadMode > > s <- hGetContents h > > hClose h > > return $ r s > > where r :: String -> SimpleDB > > r = read > > > getRecord :: SimpleDB -> SimpleIndex -> SimpleRecord > > getRecord (a, _) = (a !) > > > updateRecord :: SimpleDB -> SimpleIndex -> SimpleRecord -> SimpleDB > > updateRecord (a, f) i r = (a//[(i,r)],f) > > > storeDB :: SimpleDB -> IO () > > storeDB sdb@(a,f) = do h <- openFile f WriteMode > > hPutStr h (show sdb) > > hClose h > > > sampleDB = (array (0,10) [(x,(x+1,x*2,42)) | x <- [0..10]],"output/ > 1.db.txt") > > [2] http://hsqldb.org/ > > - Matt Munz > [EMAIL PROTECTED] > > > _______________________________________________ > Haskell mailing list > Haskell@haskell.org > http://www.haskell.org/mailman/listinfo/haskell _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell