-- | These types represent options. Option names cannot have a dash as -- their first or second character, and long option names cannot have -- an equals sign anywhere in the name. module Multiarg.Option ( ShortOpt, unShortOpt, makeShortOpt, LongOpt, unLongOpt, makeLongOpt ) where -- | Short options. Options that are preceded with a single dash on -- the command line and consist of a single letter. That single letter -- cannot be a dash. Any other Unicode character is good (including -- pathological ones like newlines). newtype ShortOpt = ShortOpt { unShortOpt :: Char } deriving (Show, Eq, Ord) -- | Creates a short option. Returns Nothing if the character is not -- valid for a short option. makeShortOpt :: Char -> Maybe ShortOpt makeShortOpt c = case c of '-' -> Nothing x -> Just $ ShortOpt x -- | Long options. Options that are preceded with two dashes on the -- command line and typically consist of an entire mnemonic word, such -- as @lines@. However, anything that is at least one letter long is -- fine for a long option name. The name must be at least one -- character long. It cannot have an equal sign anywhere in its -- name. Otherwise any Unicode character is good (including -- pathological ones like newlines). data LongOpt = LongOpt { unLongOpt :: String } deriving (Show, Eq, Ord) -- | Makes a long option. Returns Nothing if the string is not a valid -- long option. makeLongOpt :: String -> Maybe LongOpt makeLongOpt t = if isValidLongOptText t then Just $ LongOpt t else Nothing isValidLongOptText :: String -> Bool isValidLongOptText s = case s of [] -> False xs -> not $ '=' `elem` xs