optparse-applicative 0.8.1 → 0.9.0
raw patch · 6 files changed
+31/−24 lines, 6 filesdep +transformers-compatdep ~basedep ~transformers
Dependencies added: transformers-compat
Dependency ranges changed: base, transformers
Files
- CHANGELOG.md +4/−0
- Options/Applicative/Builder.hs +1/−2
- Options/Applicative/Extra.hs +7/−3
- Options/Applicative/Internal.hs +10/−13
- Options/Applicative/Types.hs +6/−4
- optparse-applicative.cabal +3/−2
CHANGELOG.md view
@@ -1,3 +1,7 @@+## Version 0.9.0 (23 May 2014)++- The option returned by `abortOption` is now visible by default.+ ## Version 0.8.1 (5 May 2014) - Fixed bugs
Options/Applicative/Builder.hs view
@@ -285,8 +285,7 @@ [ reader (const (ReadM (Left err))) , noArgError err , value id- , metavar ""- , hidden ]+ , metavar "" ] -- | An option that always fails and displays a message. infoOption :: String -> Mod OptionFields (a -> a) -> Parser (a -> a)
Options/Applicative/Extra.hs view
@@ -27,6 +27,7 @@ import Options.Applicative.Builder.Internal import Options.Applicative.Common import Options.Applicative.Help+ import Options.Applicative.Internal import Options.Applicative.Types @@ -35,7 +36,8 @@ helper = abortOption ShowHelpText $ mconcat [ long "help" , short 'h'- , help "Show this help text" ]+ , help "Show this help text"+ , hidden ] hsubparser :: Mod CommandFields a -> Parser a hsubparser m = mkParser d g rdr@@ -117,8 +119,9 @@ in (render_help h, exit_code) where exit_code = case msg of- ErrorMsg _ -> ExitFailure (infoFailureCode pinfo)- _ -> ExitSuccess+ ErrorMsg _ -> ExitFailure (infoFailureCode pinfo)+ UnknownError -> ExitFailure (infoFailureCode pinfo)+ _ -> ExitSuccess with_context :: Context -> ParserInfo a@@ -142,6 +145,7 @@ ShowHelpText -> mempty ErrorMsg m -> stringChunk m InfoMsg m -> stringChunk m+ UnknownError -> mempty base_help :: ParserInfo a -> ParserHelp base_help i
Options/Applicative/Internal.hs view
@@ -29,8 +29,8 @@ import Control.Applicative (Applicative(..), Alternative(..), (<$>)) import Control.Monad (MonadPlus(..), liftM, ap, guard) import Control.Monad.Trans.Class (MonadTrans, lift)-import Control.Monad.Trans.Error- (runErrorT, ErrorT(..), Error(..), throwError, catchError)+import Control.Monad.Trans.Except+ (runExceptT, ExceptT(..), throwE, catchE) import Control.Monad.Trans.Reader (runReader, runReaderT, Reader, ReaderT, ask) import Control.Monad.Trans.Writer (runWriterT, WriterT, tell)@@ -50,7 +50,7 @@ errorP :: ParseError -> m a exitP :: Parser b -> Maybe a -> m a -newtype P a = P (ErrorT ParseError (WriterT Context (Reader ParserPrefs)) a)+newtype P a = P (ExceptT ParseError (WriterT Context (Reader ParserPrefs)) a) instance Functor P where fmap f (P m) = P $ fmap f m@@ -91,9 +91,9 @@ getPrefs = P . lift . lift $ ask missingArgP e _ = errorP e- tryP (P p) = P $ lift $ runErrorT p+ tryP (P p) = P $ lift $ runExceptT p exitP _ = P . hoistMaybe- errorP = P . throwError+ errorP = P . throwE hoistMaybe :: MonadPlus m => Maybe a -> m a hoistMaybe = maybe mzero return@@ -102,7 +102,7 @@ hoistEither = either errorP return runP :: P a -> ParserPrefs -> (Either ParseError a, Context)-runP (P p) = runReader . runWriterT . runErrorT $ p+runP (P p) = runReader . runWriterT . runExceptT $ p uncons :: [a] -> Maybe (a, [a]) uncons [] = Nothing@@ -115,9 +115,6 @@ = ComplParseError String | ComplExit -instance Error ComplError where- strMsg = ComplParseError- data ComplResult a = ComplParser SomeParser | ComplOption Completer@@ -138,7 +135,7 @@ ComplOption c -> ComplOption c newtype Completion a =- Completion (ErrorT ParseError (ReaderT ParserPrefs ComplResult) a)+ Completion (ExceptT ParseError (ReaderT ParserPrefs ComplResult) a) instance Functor Completion where fmap f (Completion m) = Completion $ fmap f m@@ -165,12 +162,12 @@ getPrefs = Completion $ lift ask missingArgP _ = Completion . lift . lift . ComplOption- tryP (Completion p) = Completion $ catchError (Right <$> p) (return . Left)+ tryP (Completion p) = Completion $ catchE (Right <$> p) (return . Left) exitP p _ = Completion . lift . lift . ComplParser $ SomeParser p- errorP = Completion . throwError+ errorP = Completion . throwE runCompletion :: Completion r -> ParserPrefs -> Maybe (Either SomeParser Completer)-runCompletion (Completion c) prefs = case runReaderT (runErrorT c) prefs of+runCompletion (Completion c) prefs = case runReaderT (runExceptT c) prefs of ComplResult _ -> Nothing ComplParser p' -> Just $ Left p' ComplOption compl -> Just $ Right compl
Options/Applicative/Types.hs view
@@ -39,7 +39,6 @@ import Control.Applicative (Applicative(..), Alternative(..), (<$>), optional) import Control.Monad (ap, liftM, MonadPlus, mzero, mplus)-import Control.Monad.Trans.Error (Error(..)) import Data.Monoid (Monoid(..)) import System.Exit (ExitCode(..)) @@ -50,10 +49,13 @@ = ErrorMsg String | InfoMsg String | ShowHelpText+ | UnknownError deriving Show -instance Error ParseError where- strMsg = ErrorMsg+instance Monoid ParseError where+ mempty = UnknownError+ mappend UnknownError m = m+ mappend m _ = m -- | A full description for a runnable 'Parser' for a program. data ParserInfo a = ParserInfo@@ -136,7 +138,7 @@ fail = ReadM . Left . ErrorMsg instance MonadPlus ReadM where- mzero = ReadM $ Left (strMsg "")+ mzero = ReadM $ Left UnknownError mplus m1 m2 = case runReadM m1 of Left _ -> m2 Right r -> return r
optparse-applicative.cabal view
@@ -1,5 +1,5 @@ name: optparse-applicative-version: 0.8.1+version: 0.9.0 synopsis: Utilities and combinators for parsing command line options description: Here is a simple example of an applicative option parser:@@ -108,7 +108,8 @@ Options.Applicative.Internal ghc-options: -Wall build-depends: base == 4.*,- transformers >= 0.2 && < 0.4,+ transformers >= 0.2 && < 0.5,+ transformers-compat == 0.3.*, process >= 1.0 && < 1.3, ansi-wl-pprint >= 0.6 && < 0.7 test-suite tests