structured-cli
Haskell library for building structured CLI applications
This module provides the tools to build a complete “structured” CLI application, similar
to those found in systems like Cisco IOS or console configuration utilities etc. It aims
to be easy for implementors to use.
It is often the case that a simple example is the best user guide, at least for the
experienced programmer. The following code illustrates a basic but functioning CLI application:
module Main where
import Control.Monad (void)
import Control.Monad.IO.Class (liftIO)
import Data.Default (def)
import System.Console.StructuredCLI
root :: Commands ()
root = do
world >+ do
hello
bye
command "exit" "return to previous level" exit
world :: Commands ()
world = command "world" "enter into the world" $ return NewLevel
hello :: Commands ()
hello = command "hello" "prints a greeting" $ do
liftIO . putStrLn $ "Hello world!"
return NoAction
bye :: Commands ()
bye = command "bye" "say goodbye" $ do
liftIO . putStrLn $ "Sayonara!"
return NoAction
main :: IO ()
main = void $ runCLI "Hello CLI" def root
resulting example session:
>>> Hello CLI > ?
- world: enter into the world
>>> Hello CLI > world
>>> Hello CLI world > ?
- exit: return to previous level
- bye: say goodbye
- hello: prints a greeting
>>> Hello CLI world > hello
Hello world!
>>> Hello CLI world > bye
Sayonara!
>>> Hello CLI world > exit
>>> Hello CLI >
A good way to get you started is to grab the example code available under example/Main.hs and modify it to suit your needs.