{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
module Options.Applicative.Args
( argsArgument
, argsOption
, cmdOption
) where
import Data.Attoparsec.Args ( EscapingMode (..), parseArgsFromString )
import qualified Options.Applicative as O
import Stack.Prelude
argsArgument :: O.Mod O.ArgumentFields [String] -> O.Parser [String]
argsArgument :: Mod ArgumentFields [String] -> Parser [String]
argsArgument =
forall a. ReadM a -> Mod ArgumentFields a -> Parser a
O.argument
(do String
s <- forall s. IsString s => ReadM s
O.str
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a. String -> ReadM a
O.readerError forall (f :: * -> *) a. Applicative f => a -> f a
pure (EscapingMode -> String -> Either String [String]
parseArgsFromString EscapingMode
Escaping String
s))
argsOption :: O.Mod O.OptionFields [String] -> O.Parser [String]
argsOption :: Mod OptionFields [String] -> Parser [String]
argsOption =
forall a. ReadM a -> Mod OptionFields a -> Parser a
O.option
(do String
s <- forall s. IsString s => ReadM s
O.str
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a. String -> ReadM a
O.readerError forall (f :: * -> *) a. Applicative f => a -> f a
pure (EscapingMode -> String -> Either String [String]
parseArgsFromString EscapingMode
Escaping String
s))
cmdOption ::
O.Mod O.OptionFields (String, [String])
-> O.Parser (String, [String])
cmdOption :: Mod OptionFields (String, [String]) -> Parser (String, [String])
cmdOption =
forall a. ReadM a -> Mod OptionFields a -> Parser a
O.option
(do String
s <- forall s. IsString s => ReadM s
O.str
[String]
xs <- forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either forall a. String -> ReadM a
O.readerError forall (f :: * -> *) a. Applicative f => a -> f a
pure (EscapingMode -> String -> Either String [String]
parseArgsFromString EscapingMode
Escaping String
s)
case [String]
xs of
[] -> forall a. String -> ReadM a
O.readerError String
"Must provide a command"
String
x:[String]
xs' -> forall (f :: * -> *) a. Applicative f => a -> f a
pure (String
x, [String]
xs'))