module WithCli.Pure.Internal where
import WithCli.HasArguments
import WithCli.Modifier
import WithCli.Parser
import WithCli.Result
class WithCliPure function output where
run :: String -> Modifiers -> Result (Parser Unnormalized input)
-> (input -> function) -> [String] -> Result output
instance WithCliPure output output where
run :: String -> Modifiers -> Result (Parser Unnormalized input) -> (input -> output)
-> [String] -> Result output
run progName modifiers mkParser function args = do
mkParser >>= \ parser -> do
input <- runParser progName modifiers
(normalizeParser (applyModifiers modifiers parser))
args
return $ function input
instance (HasArguments input, WithCliPure function output) =>
WithCliPure (input -> function) output where
run :: String -> Modifiers -> Result (Parser Unnormalized otherInput)
-> (otherInput -> (input -> function)) -> [String] -> Result output
run progName modifiers mkParser function args = do
run progName modifiers
(combine mkParser (argumentsParser modifiers Nothing))
(\ (otherInput, input) -> function otherInput input)
args