1{-# LANGUAGE NoImplicitPrelude #-} 2{-# LANGUAGE OverloadedStrings #-} 3 4-- | Accepting arguments to be passed through to a sub-process. 5 6module Options.Applicative.Args 7 (argsArgument 8 ,argsOption 9 ,cmdOption) 10 where 11 12import Data.Attoparsec.Args 13import qualified Options.Applicative as O 14import Stack.Prelude 15 16-- | An argument which accepts a list of arguments e.g. @--ghc-options="-X P.hs \"this\""@. 17argsArgument :: O.Mod O.ArgumentFields [String] -> O.Parser [String] 18argsArgument = 19 O.argument 20 (do string <- O.str 21 either O.readerError return (parseArgsFromString Escaping string)) 22 23-- | An option which accepts a list of arguments e.g. @--ghc-options="-X P.hs \"this\""@. 24argsOption :: O.Mod O.OptionFields [String] -> O.Parser [String] 25argsOption = 26 O.option 27 (do string <- O.str 28 either O.readerError return (parseArgsFromString Escaping string)) 29 30-- | An option which accepts a command and a list of arguments e.g. @--exec "echo hello world"@ 31cmdOption :: O.Mod O.OptionFields (String, [String]) -> O.Parser (String, [String]) 32cmdOption = 33 O.option 34 (do string <- O.str 35 xs <- either O.readerError return (parseArgsFromString Escaping string) 36 case xs of 37 [] -> O.readerError "Must provide a command" 38 x:xs' -> return (x, xs')) 39