{-# LANGUAGE DataKinds #-} import Control.Monad.Trans import Options.Declarative greet :: Flag "g" '["greet"] "STRING" "greeting message" (Def "Hello" String) -> Arg "NAME" String -> Cmd "greet" () greet msg name = do liftIO $ putStrLn $ get msg ++ ", " ++ get name ++ "!" main :: IO () main = run_ greet