-- | This is sample code using "System.Console.MultiArg". This could -- be a command-line parser for the version of the Unix command @tail@ -- that is included with GNU coreutils version 8.5. "main" simply gets -- the command line arguments, parses them, and prints out what was -- parsed. To test it out, simply compile an executable that looks -- like this and then feed it different options: -- -- > import System.Console.MultiArg.SampleParser -- > main = sampleMain Intersperse -- -- or: -- -- > import System.Console.MultiArg.SampleParser -- > main = sampleMain StopOptions -- -- The code in the module is the sample code; the sample code is not -- in the Haddock documentation! If you're reading this in Haddock, -- you will want to also take a look at the actual source code. module System.Console.MultiArg.SampleParser where import qualified System.Console.MultiArg.Combinator as C import System.Console.MultiArg.GetArgs (getArgs) import qualified System.Console.MultiArg.SimpleParser as P data Flag = Bytes String | Follow (Maybe String) | Retry | Lines String | Stats String | Pid String | Quiet | Sleep String | Verbose | Help | Version | Filename String deriving Show specs :: [C.OptSpec Flag] specs = [ C.OptSpec ["bytes"] ['c'] (C.OneArg Bytes) , C.OptSpec ["follow"] ['f'] (C.OptionalArg Follow) , C.OptSpec ["follow-retry"] ['F'] (C.NoArg Retry) , C.OptSpec ["lines"] ['n'] (C.OneArg Lines) , C.OptSpec ["max-unchanged-stats"] [] (C.OneArg Stats) , C.OptSpec ["pid"] [] (C.OneArg Pid) , C.OptSpec ["quiet"] ['q'] (C.NoArg Quiet) , C.OptSpec ["sleep-interval"] ['s'] (C.OneArg Sleep) , C.OptSpec ["verbose"] ['v'] (C.NoArg Verbose) , C.OptSpec ["help"] [] (C.NoArg Help) , C.OptSpec ["version"] [] (C.NoArg Version) ] sampleMain :: P.Intersperse -> IO () sampleMain i = do as <- getArgs let r = P.simple i specs Filename as print r