module WithCli.Pure ( withCliPure, WithCliPure(), Result(..), handleResult, HasArguments(argumentsParser), atomicArgumentsParser, Argument(argumentType, parseArgument), -- * Modifiers Modifier(..), -- * Useful Re-exports GHC.Generic, Typeable, Proxy(..), ) where import Data.Proxy import Data.Typeable import GHC.Generics as GHC import WithCli.Argument import WithCli.HasArguments import WithCli.Modifier import WithCli.Parser import WithCli.Pure.Internal import WithCli.Result -- | Pure variant of 'WithCli.withCliModified'. withCliPure :: WithCliPure function a => String -> [Modifier] -> [String] -> function -- ^ The @function@ parameter can be a -- function with arbitrary many parameters as long as they have an instance -- for 'HasArguments'. You can choose the return type of @function@ freely, -- 'withCliPure' will return it wrapped in 'Result' to account for parse -- errors, etc. (see 'Result'). -> Result a withCliPure progName modifiers args function = sanitize $ do modifiers <- mkModifiers modifiers run progName modifiers (return $ emptyParser ()) (\ () -> function) args