
On Sun, Nov 9, 2008 at 11:03 AM, Don Stewart
judah.jacobson:
Note that haskeline has a lot of dependencies and requires TemplateHaskell and many other language extensions.
I'm also somewhat wary of switching to haskeline in ghc-6.10. I think these issues could be resolved in time for 6.12, though:
haskeline needs /way/ too many extensions for a simple console reader...
Well, even though the external API of a line reader may look simple, under the hood there can be a lot going on, both in the user interface (e.g. user preferences, multiple key bindings, history recall/search, undo/redo, tab completion) and backend (e.g. redraw efficiently, cross-platform compatibility). Using a stack of monad transformers to encapsulate the state and settings helped make the code much more modular, understandable and concise, but also required several type extensions to work the way I wanted (MultiParamTypeClasses, OverlappingInstances, FlexibleContexts, etc.). I felt the tradeoff was worth it when originally writing the code, but patches or suggestions are, of course, welcome :-) (Incidentally, the .cabal file in haskeline-3.2 erroneously lists GADTs and FunDeps which are not actually required; those extensions will be removed for the next release.) Best, -Judah