A lightweight readline-replacement library for Haskell based on the linenoise library. (Not production ready!)
See the demo app for usage, or see the climb library for higher-level building blocks for GHCi-like REPLs with colon-commands.
Differences from alternatives
haskeline
This uses FFI to a minimal C library vs pure Haskell
This uses standard MTL/Unlift typeclasses vs custom ones.
This does not require the use of a specific monad transformer.
readline
This offers a MonadIO/MonadUnliftIO interface vs raw IO.
This vendors and statically links its underlying library to simplify the build process.
License and attribution
This library includes the source code and license for linenoise in cbits.
It is a fork of an older library with all licensing and
attribution preserved.
Development workflow
This project uses stack to build.
The Makefile has a bunch of relevant phony targets for a development workflow including
build - Build the library and demo
download - Update vendored linenoise
demo - Run the demo app
deps - Install dev tools
lint - Lint with hlint
format - Format with stylish-haskell
docs - Generate docs
In addition, there are targets starting with ci that are invoked in various CI phases.
TODO
Support unicode (may involve vendoring a linenoisefork)
Verify that the FFI modifications for ByteString are memory-safe