On Thu, 2007-10-25 at 11:30 -0400, Graham Fawcett wrote: > Hi folks, > > I'm writing a Gnu DBM module as an exercise for learning Haskell and > its FFI. I'm wondering how I might write a function that returns the > database keys as a lazy list. I've wrapped the two relevant foreign > functions: > > firstKey :: Ptr Db -> IO (Maybe String) > nextKey :: Ptr Db -> String -> IO (Maybe String) > > NextKey takes a key, and returns the next one. Either function could > return Nothing, since the db may have 0 or 1 keys. > > Given these, is it possible to write a (simple) function > > allKeys :: Ptr Db -> IO [String] > > that lazily fetches the keys? (Or, an idiomatic way of achieving the > same end?)
Just use unsafeInterleaveIO in the obvious definition to read all the keys. That said, it's not called unsafeInterleaveIO for no reason. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
