Readline readHistory & writeHistory API broken

Krasimir Angelov kr.angelov at
Sun Jun 8 11:30:34 EDT 2008

The current readHistory and writeHistory bindings are defined as:

-- |Read in a history file.  Returns 'False' on failure
-- (for example, if the file does not exist).
readHistory :: FilePath -- ^ The file to read (if null, read ~\/.history)
            -> IO Bool
readHistory fp = do
  ok <- withCString fp read_history
  return (ok==0)
foreign import ccall unsafe read_history :: Ptr CChar -> IO CInt

-- |Write out a history file.  Returns 'False' if there was a problem
writing the file.
writeHistory :: FilePath -- ^ The file to write (if null, write ~\/.history)
             -> IO Bool
writeHistory fp = do
  ok <- withCString fp write_history
  return (ok==0)
foreign import ccall unsafe write_history :: Ptr CChar -> IO CInt

Note the comments "(if null, write ~/.history)"! This is supported in
the original C API but in Haskell the filepath cannot be null. In the
best case it can be empty string. Either the type signatures have to
be changed to accept (Maybe FilePath) or the comments have to be
changed because the Haskell binding currently doesn't support this

Comments?  I hope that this will not start another endless discussion.


More information about the Libraries mailing list