packages feed

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 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