Clean up existing examples, Remove redundant function
mainFromCmdParserWithHelpDesc is no longer required, because peekCmdDesc can be used at the top-level to access the full CmdDesc value. The knot-tying implementation is no longer required either.devtest
parent
91d57b07c4
commit
071eacccfc
|
@ -5,7 +5,9 @@ import UI.Butcher.Monadic
|
||||||
|
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = mainFromCmdParserWithHelpDesc $ \helpDesc -> do
|
main = mainFromCmdParser $ do
|
||||||
|
|
||||||
|
helpDesc <- peekCmdDesc
|
||||||
|
|
||||||
addCmdSynopsis "a simple butcher example program"
|
addCmdSynopsis "a simple butcher example program"
|
||||||
addCmdHelpStr "a very long help document"
|
addCmdHelpStr "a very long help document"
|
||||||
|
|
|
@ -38,9 +38,6 @@ parser = do
|
||||||
putStrLn $ "bar = " ++ show bar
|
putStrLn $ "bar = " ++ show bar
|
||||||
putStrLn $ "x = " ++ show x
|
putStrLn $ "x = " ++ show x
|
||||||
|
|
||||||
leftToMaybe :: Either a b -> Maybe a
|
|
||||||
leftToMaybe = either Just (const Nothing)
|
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = displayConsoleRegions $ do
|
main = displayConsoleRegions $ do
|
||||||
withReg $ \reg1 -> withReg $ \reg2 -> withReg $ \reg3 -> do
|
withReg $ \reg1 -> withReg $ \reg2 -> withReg $ \reg3 -> do
|
||||||
|
|
|
@ -62,31 +62,6 @@ mainFromCmdParser cmd = do
|
||||||
printErr $ ppUsage desc
|
printErr $ ppUsage desc
|
||||||
(_desc, _remaining, Right out) -> out
|
(_desc, _remaining, Right out) -> out
|
||||||
|
|
||||||
-- | Same as mainFromCmdParser, but with one additional twist: You get access
|
|
||||||
-- to a knot-tied complete CommandDesc for this full command. Useful in
|
|
||||||
-- combination with 'UI.Butcher.Monadic.BuiltinCommands.addHelpCommand'
|
|
||||||
-- mainFromCmdParserWithHelpDesc
|
|
||||||
-- :: (CommandDesc -> CmdParser (IO ()) (IO ())) -> IO ()
|
|
||||||
-- mainFromCmdParserWithHelpDesc cmdF = do
|
|
||||||
-- progName <- System.Environment.getProgName
|
|
||||||
-- args <- System.Environment.getArgs
|
|
||||||
-- case runCmdParserWithHelpDesc (InputArgs args) cmdF of
|
|
||||||
-- (desc, Left err) -> do
|
|
||||||
-- putStrErrLn $ progName ++ ": error parsing arguments: " ++ head
|
|
||||||
-- (_pe_messages err)
|
|
||||||
-- putStrErrLn $ case _pe_remaining err of
|
|
||||||
-- InputString "" -> "at the end of input."
|
|
||||||
-- InputString str -> case show str of
|
|
||||||
-- s | length s < 42 -> "at: " ++ s ++ "."
|
|
||||||
-- s -> "at: " ++ take 40 s ++ "..\"."
|
|
||||||
-- InputArgs [] -> "at the end of input"
|
|
||||||
-- InputArgs xs -> case List.unwords $ show <$> xs of
|
|
||||||
-- s | length s < 42 -> "at: " ++ s ++ "."
|
|
||||||
-- s -> "at: " ++ take 40 s ++ "..\"."
|
|
||||||
-- putStrErrLn $ "usage:"
|
|
||||||
-- printErr $ ppUsage desc
|
|
||||||
-- (_desc, Right out) -> out
|
|
||||||
|
|
||||||
putStrErrLn :: String -> IO ()
|
putStrErrLn :: String -> IO ()
|
||||||
putStrErrLn s = hPutStrLn stderr s
|
putStrErrLn s = hPutStrLn stderr s
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
-- | Turn your CmdParser into an IO () to be used as your program @main@.
|
-- | Turn your CmdParser into an IO () to be used as your program @main@.
|
||||||
module UI.Butcher.Monadic.IO
|
module UI.Butcher.Monadic.IO
|
||||||
( mainFromCmdParser
|
( mainFromCmdParser
|
||||||
, mainFromCmdParserWithHelpDesc
|
|
||||||
)
|
)
|
||||||
where
|
where
|
||||||
|
|
||||||
|
@ -73,48 +72,6 @@ mainFromCmdParser cmd = do
|
||||||
printErr $ ppUsage desc
|
printErr $ ppUsage desc
|
||||||
Just a -> a
|
Just a -> a
|
||||||
|
|
||||||
-- | Same as mainFromCmdParser, but with one additional twist: You get access
|
|
||||||
-- to a knot-tied complete CommandDesc for this full command. Useful in
|
|
||||||
-- combination with 'UI.Butcher.Monadic.BuiltinCommands.addHelpCommand'
|
|
||||||
mainFromCmdParserWithHelpDesc
|
|
||||||
:: (CommandDesc -> CmdParser Identity (IO ()) ()) -> IO ()
|
|
||||||
mainFromCmdParserWithHelpDesc cmdF = do
|
|
||||||
progName <- System.Environment.getProgName
|
|
||||||
let (checkResult, optimisticFullDesc) =
|
|
||||||
( toCmdDesc (Just progName) (cmdF optimisticFullDesc)
|
|
||||||
, either (const emptyCommandDesc) id $ checkResult
|
|
||||||
)
|
|
||||||
-- knot-tying at its finest..
|
|
||||||
case checkResult of
|
|
||||||
Left e -> do
|
|
||||||
putStrErrLn
|
|
||||||
$ progName
|
|
||||||
++ ": internal error: failed sanity check for butcher main command parser!"
|
|
||||||
putStrErrLn $ "(" ++ e ++ ")"
|
|
||||||
putStrErrLn $ "aborting."
|
|
||||||
Right fullDesc -> do
|
|
||||||
args <- System.Environment.getArgs
|
|
||||||
case runCmdParserCoreFromDesc fullDesc (InputArgs args) (cmdF fullDesc) of
|
|
||||||
(desc, _, Left err) -> do
|
|
||||||
putStrErrLn $ progName ++ ": error parsing arguments: " ++ head
|
|
||||||
(_pe_messages err)
|
|
||||||
putStrErrLn $ case _pe_remaining err of
|
|
||||||
InputString "" -> "at the end of input."
|
|
||||||
InputString str -> case show str of
|
|
||||||
s | length s < 42 -> "at: " ++ s ++ "."
|
|
||||||
s -> "at: " ++ take 40 s ++ "..\"."
|
|
||||||
InputArgs [] -> "at the end of input"
|
|
||||||
InputArgs xs -> case List.unwords $ show <$> xs of
|
|
||||||
s | length s < 42 -> "at: " ++ s ++ "."
|
|
||||||
s -> "at: " ++ take 40 s ++ "..\"."
|
|
||||||
putStrErrLn $ "usage:"
|
|
||||||
printErr $ ppUsage desc
|
|
||||||
(desc, _, Right out) -> case out of
|
|
||||||
Nothing -> do
|
|
||||||
putStrErrLn $ "usage:"
|
|
||||||
printErr $ ppUsage desc
|
|
||||||
Just a -> a
|
|
||||||
|
|
||||||
putStrErrLn :: String -> IO ()
|
putStrErrLn :: String -> IO ()
|
||||||
putStrErrLn s = hPutStrLn stderr s
|
putStrErrLn s = hPutStrLn stderr s
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue