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.
- How to use this module:
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.