    -- |
    -- Module: Options.Types
    -- License: MIT
    module Options.Types
    	( OptionDefinitions(..)
    	, Group(..)
    	, OptionKey(..)
    	, Location(..)
    	, OptionInfo(..)
    	) where

    data OptionDefinitions = OptionDefinitions [OptionInfo] [(String, [OptionInfo])]

    data Group = Group
    	{
    	  groupName :: String

    	-- | A short title for the group, which is used when printing
    	-- @--help@ output.
    	, groupTitle :: String

    	-- | A description of the group, which is used when printing
    	-- @--help@ output.
    	, groupDescription :: String
    	}
    	deriving (Eq, Show)

    data OptionKey
    	= OptionKey String
    	| OptionKeyHelpSummary
    	| OptionKeyHelpGroup String
    	| OptionKeyGenerated Integer
    	| OptionKeyIgnored
    	deriving (Eq, Ord, Show)

    data Location = Location
    	{ locationPackage :: String
    	, locationModule :: String
    	, locationFilename :: String
    	, locationLine :: Integer
    	}
    	deriving (Eq, Show)

    data OptionInfo = OptionInfo
    	{ optionInfoKey :: OptionKey
    	, optionInfoShortFlags :: [Char]
    	, optionInfoLongFlags :: [String]
    	, optionInfoDefault :: String
    	, optionInfoUnary :: Bool
    	, optionInfoUnaryOnly :: Bool  -- used only for --help and friends
    	, optionInfoDescription :: String
    	, optionInfoGroup :: Maybe Group
    	, optionInfoLocation :: Maybe Location
    	, optionInfoTypeName :: String
    	}
    	deriving (Eq, Show)