Skip to content

sdiehl/haskell-linenoise

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Repl

Build Status

Initial work on a lightweight readline library for Haskell based on the linenoise library. Designed from the ground up to work more smoothly with modern monad transformers and exceptions libraries.

import System.Console.Repl

type Repl = ReplT IO

completer :: String -> [String]
completer ('h':_) = ["hello", "hello there"]
completer _ = []

repl :: Repl ()
repl = replM ">>> " outputStrLn completer

main :: IO ()
main = runRepl repl defaultSettings

Can compose with the regular State monad, for instance to do stateful tab completion. Something which is painful with Haskeline.

import System.Console.Repl
import Control.Monad.State.Strict
import Data.List (isPrefixOf)

type Repl = ReplT (StateT [String] IO)

completer :: String -> Repl [String]
completer line = do
  comps <- get
  return $ filter (isPrefixOf line) comps

action :: String -> Repl ()
action x = do
  modify $ (x:)
  liftIO $ putStrLn x

repl :: Repl ()
repl = replM ">>> " action (byWord completer)

main :: IO ()
main = evalStateT (runRepl repl defaultSettings) []

License

Includes the source code for linenoise. Released under the BSD license.

Copyright (c) 2014-2017, Stephen Diehl

About

Lightweight readline library for Haskell

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors