multiarg 0.14.0.0 → 0.16.0.0
raw patch · 5 files changed
+64/−31 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- System.Console.MultiArg.Combinator: data OptArgError
- System.Console.MultiArg.Combinator: instance Eq OptArgError
- System.Console.MultiArg.Combinator: instance Show OptArgError
+ System.Console.MultiArg.Combinator: data InputError
+ System.Console.MultiArg.Combinator: instance Eq InputError
+ System.Console.MultiArg.Combinator: instance Show InputError
- System.Console.MultiArg.Combinator: ErrorMsg :: String -> OptArgError
+ System.Console.MultiArg.Combinator: ErrorMsg :: String -> InputError
- System.Console.MultiArg.Combinator: NoMsg :: OptArgError
+ System.Console.MultiArg.Combinator: NoMsg :: InputError
- System.Console.MultiArg.Combinator: OneArgE :: (String -> Exceptional OptArgError a) -> ArgSpec a
+ System.Console.MultiArg.Combinator: OneArgE :: (String -> Exceptional InputError a) -> ArgSpec a
- System.Console.MultiArg.Combinator: OptionalArgE :: (Maybe String -> Exceptional OptArgError a) -> ArgSpec a
+ System.Console.MultiArg.Combinator: OptionalArgE :: (Maybe String -> Exceptional InputError a) -> ArgSpec a
- System.Console.MultiArg.Combinator: ThreeArgE :: (String -> String -> String -> Exceptional OptArgError a) -> ArgSpec a
+ System.Console.MultiArg.Combinator: ThreeArgE :: (String -> String -> String -> Exceptional InputError a) -> ArgSpec a
- System.Console.MultiArg.Combinator: TwoArgE :: (String -> String -> Exceptional OptArgError a) -> ArgSpec a
+ System.Console.MultiArg.Combinator: TwoArgE :: (String -> String -> Exceptional InputError a) -> ArgSpec a
- System.Console.MultiArg.Combinator: VariableArgE :: ([String] -> Exceptional OptArgError a) -> ArgSpec a
+ System.Console.MultiArg.Combinator: VariableArgE :: ([String] -> Exceptional InputError a) -> ArgSpec a
- System.Console.MultiArg.Combinator: optReader :: Read a => Maybe String -> Exceptional OptArgError (Maybe a)
+ System.Console.MultiArg.Combinator: optReader :: Read a => Maybe String -> Exceptional InputError (Maybe a)
- System.Console.MultiArg.Combinator: reader :: Read a => String -> Exceptional OptArgError a
+ System.Console.MultiArg.Combinator: reader :: Read a => String -> Exceptional InputError a
- System.Console.MultiArg.SimpleParser: Mode :: String -> Intersperse -> [OptSpec b] -> (String -> b) -> ([b] -> result) -> (String -> String) -> Mode result
+ System.Console.MultiArg.SimpleParser: Mode :: String -> Intersperse -> [OptSpec b] -> (String -> Exceptional InputError b) -> ([b] -> result) -> (String -> String) -> Mode result
- System.Console.MultiArg.SimpleParser: mPosArgs :: Mode result -> String -> b
+ System.Console.MultiArg.SimpleParser: mPosArgs :: Mode result -> String -> Exceptional InputError b
- System.Console.MultiArg.SimpleParser: simple :: Intersperse -> [OptSpec a] -> (String -> a) -> [String] -> Exceptional Error [a]
+ System.Console.MultiArg.SimpleParser: simple :: Intersperse -> [OptSpec a] -> (String -> Exceptional InputError a) -> [String] -> Exceptional Error [a]
- System.Console.MultiArg.SimpleParser: simpleWithHelp :: (String -> String) -> Intersperse -> [OptSpec a] -> (String -> a) -> IO [a]
+ System.Console.MultiArg.SimpleParser: simpleWithHelp :: (String -> String) -> Intersperse -> [OptSpec a] -> (String -> Exceptional InputError a) -> IO [a]
Files
- NEWS +8/−0
- System/Console/MultiArg/Combinator.hs +16/−16
- System/Console/MultiArg/SampleParser.hs +1/−1
- System/Console/MultiArg/SimpleParser.hs +38/−13
- multiarg.cabal +1/−1
NEWS view
@@ -1,3 +1,11 @@+Release 0.16.0.0, May 21, 2013+Changes since release 0.14.0.0:++* Rename OptArgError to InputError++* Change functions in SimpleParser to allow for positional arguments+ that might fail to be parsed+ Release 0.14.0.0, April 8, 2013 Changes since release 0.12.0.2:
System/Console/MultiArg/Combinator.hs view
@@ -8,7 +8,7 @@ -- * Combined long and short option parser OptSpec(OptSpec, longOpts, shortOpts, argSpec),- OptArgError(..),+ InputError(..), reader, optReader, ArgSpec(..),@@ -89,7 +89,7 @@ -- | Reads in values that are members of Read. Provides a generic -- error message if the read fails.-reader :: Read a => String -> Ex.Exceptional OptArgError a+reader :: Read a => String -> Ex.Exceptional InputError a reader s = case reads s of (a, ""):[] -> return a _ -> Ex.throw . ErrorMsg $ "could not parse option argument"@@ -101,7 +101,7 @@ optReader :: Read a => Maybe String- -> Ex.Exceptional OptArgError (Maybe a)+ -> Ex.Exceptional InputError (Maybe a) optReader ms = case ms of Nothing -> return Nothing Just s -> case reads s of@@ -109,7 +109,7 @@ _ -> Ex.throw . ErrorMsg $ "could not parse option argument" -- | Indicates errors when parsing options to arguments.-data OptArgError+data InputError = NoMsg -- ^ No error message accompanies this failure. multiarg will create -- a generic error message for you.@@ -123,7 +123,7 @@ deriving (Eq, Show) --- | Create an error message from an OptArgError.+-- | Create an error message from an InputError. errorMsg :: Either LongOpt ShortOpt -- ^ The option with the faulty argument@@ -131,7 +131,7 @@ -> [String] -- ^ The faulty command line arguments - -> OptArgError+ -> InputError -> String errorMsg badOpt ss err = arg ++ opt ++ msg where@@ -215,23 +215,23 @@ -- option to GNU grep, which requires the user to supply one of -- three arguments: @always@, @never@, or @auto@. - | OptionalArgE (Maybe String -> Ex.Exceptional OptArgError a)+ | OptionalArgE (Maybe String -> Ex.Exceptional InputError a) -- ^ This option takes an optional argument, like -- 'OptionalArg'. Parsing of the optional argument might fail. - | OneArgE (String -> Ex.Exceptional OptArgError a)+ | OneArgE (String -> Ex.Exceptional InputError a) -- ^ This option takes a single argument, like 'OneArg'. Parsing -- of the argument might fail. - | TwoArgE (String -> String -> Ex.Exceptional OptArgError a)+ | TwoArgE (String -> String -> Ex.Exceptional InputError a) -- ^ This option takes two arguments, like 'TwoArg'. Parsing of -- the arguments might fail. - | ThreeArgE (String -> String -> String -> Ex.Exceptional OptArgError a)+ | ThreeArgE (String -> String -> String -> Ex.Exceptional InputError a) -- ^ This option takes three arguments, like 'ThreeArg'. Parsing -- of the arguments might fail. - | VariableArgE ([String] -> Ex.Exceptional OptArgError a)+ | VariableArgE ([String] -> Ex.Exceptional InputError a) -- ^ This option takes a variable number of arguments, like -- 'VariableArg'. Parsing of the arguments might fail. @@ -411,7 +411,7 @@ shortVariableArgE :: ShortOpt- -> ([String] -> Ex.Exceptional OptArgError a)+ -> ([String] -> Ex.Exceptional InputError a) -> Parser a shortVariableArgE so f = do maybeSameWordArg <- optional pendingShortOptArg@@ -427,7 +427,7 @@ shortOneArgE :: ShortOpt- -> (String -> Ex.Exceptional OptArgError a)+ -> (String -> Ex.Exceptional InputError a) -> Parser a shortOneArgE so f = do a <- firstShortArg@@ -454,7 +454,7 @@ shortTwoArgE :: ShortOpt- -> (String -> String -> Ex.Exceptional OptArgError a)+ -> (String -> String -> Ex.Exceptional InputError a) -> Parser a shortTwoArgE so f = do a1 <- firstShortArg@@ -467,7 +467,7 @@ shortThreeArgE :: ShortOpt- -> (String -> String -> String -> Ex.Exceptional OptArgError a)+ -> (String -> String -> String -> Ex.Exceptional InputError a) -> Parser a shortThreeArgE so f = do a1 <- firstShortArg@@ -489,7 +489,7 @@ shortOptionalArgE :: ShortOpt- -> (Maybe String -> Ex.Exceptional OptArgError a)+ -> (Maybe String -> Ex.Exceptional InputError a) -> Parser a shortOptionalArgE so f = do maybeSameWordArg <- optional pendingShortOptArg
System/Console/MultiArg/SampleParser.hs view
@@ -56,5 +56,5 @@ sampleMain :: P.Intersperse -> IO () sampleMain i = do as <- getArgs- let r = P.simple i specs Filename as+ let r = P.simple i specs (return . Filename) as print r
System/Console/MultiArg/SimpleParser.hs view
@@ -62,10 +62,12 @@ -> [C.OptSpec a] -- ^ All possible options - -> (String -> a)+ -> (String -> Ex.Exceptional C.InputError a) -- ^ How to handle positional arguments. This function is applied to -- the appropriate string every time the parser encounters a- -- positional argument.+ -- positional argument. This function shall return an Exception if+ -- something was wrong with the argument, or a Success if it is+ -- okay. -> [String] -- ^ The command line to parse. This function correctly handles@@ -90,20 +92,39 @@ next = (() <$ P.nonOptionPosArg) <|> P.stopper -parseStopOpts :: P.Parser a -> (String -> a) -> P.Parser [a]+parsePosArg+ :: (String -> Ex.Exceptional C.InputError a)+ -> P.Parser a+parsePosArg p = do+ a <- P.nextWord+ case p a of+ Ex.Exception e ->+ let msg = "invalid positional argument: \"" ++ a ++ "\""+ in case e of+ C.NoMsg -> fail msg+ C.ErrorMsg s -> fail $ msg ++ ": " ++ s+ Ex.Success g -> return g++parseStopOpts+ :: P.Parser a+ -> (String -> Ex.Exceptional C.InputError a)+ -> P.Parser [a] parseStopOpts optParser p =- (\opts args -> opts ++ map p args)+ (++) <$> parseOptsNoIntersperse optParser <* optional P.stopper- <*> many P.nextWord+ <*> many (parsePosArg p) -- | @parseIntersperse o p@ parses options and positional arguments, -- where o is a parser that parses options, and p is a function that, -- when applied to a string, returns the appropriate type.-parseIntersperse :: P.Parser a -> (String -> a) -> P.Parser [a]+parseIntersperse+ :: P.Parser a+ -> (String -> Ex.Exceptional C.InputError a)+ -> P.Parser [a] parseIntersperse optParser p =- let pa = (Just . p) <$> P.nonOptionPosArg+ let pa = Just <$> parsePosArg p po = Just <$> optParser ps = Nothing <$ P.stopper parser = po <|> ps <|> pa@@ -166,10 +187,12 @@ -- ^ All possible options. Do not add a @-h@ or @--help@ option; -- these are added for you. - -> (String -> a)+ -> (String -> Ex.Exceptional C.InputError a) -- ^ How to handle positional arguments. This function is applied to -- the appropriate string every time the parser encounters a- -- positional argument.+ -- positional argument. This function shall return an Exception if+ -- something was wrong with the argument, or a Success if it is+ -- okay. -> IO [a] -- ^ If help is requested, the program will print it and exit@@ -180,7 +203,7 @@ let os' = addHelpOpt os as <- GetArgs.getArgs pn <- GetArgs.getProgName- let exResult = simple i os' (fmap OtherArg p) as+ let exResult = simple i os' (fmap (fmap OtherArg) p) as rs <- case exResult of Ex.Exception e -> do IO.hPutStr IO.stderr (C.formatError pn e)@@ -215,8 +238,10 @@ , mOpts :: [C.OptSpec b] -- ^ Options for this mode - , mPosArgs :: String -> b- -- ^ How to parse positional arguments for this mode+ , mPosArgs :: String -> Ex.Exceptional C.InputError b+ -- ^ How to parse positional arguments for this mode. This+ -- function shall return an Exception if something was wrong with+ -- the argument, or a Success if it is okay. , mProcess :: [b] -> result -- ^ Processes the options after they have been parsed.@@ -285,7 +310,7 @@ Intersperse -> parseIntersperse StopOptions -> parseStopOpts os' = addHelpOpt os- rs <- prsr (C.parseOption os') (fmap OtherArg pa) <* P.end+ rs <- prsr (C.parseOption os') (fmap (fmap OtherArg) pa) <* P.end let (needsHelp, parsedOpts) = partitionHelp rs return $ if needsHelp then NeedsHelp (h pn) else NoHelp $ p parsedOpts
multiarg.cabal view
@@ -1,5 +1,5 @@ Name: multiarg-Version: 0.14.0.0+Version: 0.16.0.0 Cabal-version: >=1.8 Build-Type: Simple License: BSD3