-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Command line flag parser, very similar to Google's gflags -- -- The HFlags library supports easy definition of command line -- flags, reimplementing the ideas from Google's gflags -- (http://code.google.com/p/gflags). -- -- Command line flags can be declared in any file at the toplevel, using -- defineFlag. At runtime, the actual values are assigned to the -- toplevel flags_name constants. Those can be used purely -- throughout the program. -- -- At the beginning of the main function, $initHFlags -- "program description" has to be called to initialize the flags. -- All flags will be initialized that are transitively reachable via -- imports from main. This means, that any Haskell package can -- easily define command line flags with HFlags. This feature is -- demonstrated by -- http://github.com/errge/hflags/blob/master/examples/ImportExample.hs -- and -- http://github.com/errge/hflags/tree/master/examples/package. -- -- A simple example (more in the -- http://github.com/errge/hflags/tree/master/examples directory): -- --
-- #!/usr/bin/env runhaskell
--
-- {-# LANGUAGE TemplateHaskell #-}
--
-- import HFlags
--
-- defineFlag "name" "Indiana Jones" "Who to greet."
-- defineFlag "r:repeat" (3 + 4 :: Int) "Number of times to repeat the message."
--
-- main = do s <- $initHFlags "Simple program v0.1"
-- sequence_ $ replicate flags_repeat greet
-- putStrLn $ "Your additional arguments were: " ++ show s
-- putStrLn $ "Which is the same as: " ++ show HFlags.arguments
-- where
-- greet = putStrLn $ "Hello " ++ flags_name ++ ", very nice to meet you!"
--
--
-- At initHFlags time, the library also tries to gather flags
-- out of environment variables. HFLAGS_verbose=True is
-- equivalent to specify --verbose=True. This environment feature only
-- works with long options and the user has to specify a value even for
-- Bools.
--
-- Since version 0.2, you mustn't put the initHFlags in a parentheses
-- with the program description. Just $initHFlags, it's
-- cleaner.
--
-- See http://github.com/errge/hflags/tree/master/changelog for
-- recent changes.
@package hflags
@version 0.4.2
-- | The HFlags library supports easy definition of command line
-- flags, reimplementing the ideas from Google's gflags
-- (http://code.google.com/p/gflags).
--
-- Command line flags can be declared in any file at the toplevel, using
-- defineFlag. At runtime, the actual values are assigned to the
-- toplevel flags_name constants. Those can be used purely
-- throughout the program.
--
-- At the beginning of the main function, $initHFlags
-- "program description" has to be called to initialize the flags.
-- All flags will be initialized that are transitively reachable via
-- imports from main. This means, that any Haskell package can
-- easily define command line flags with HFlags. This feature is
-- demonstrated by
-- http://github.com/errge/hflags/blob/master/examples/ImportExample.hs
-- and
-- http://github.com/errge/hflags/tree/master/examples/package.
--
-- A simple example (more in the
-- http://github.com/errge/hflags/tree/master/examples directory):
--
--
-- #!/usr/bin/env runhaskell
--
-- {-# LANGUAGE TemplateHaskell #-}
--
-- import HFlags
--
-- defineFlag "name" "Indiana Jones" "Who to greet."
-- defineFlag "r:repeat" (3 + 4 :: Int) "Number of times to repeat the message."
--
-- main = do s <- $initHFlags "Simple program v0.1"
-- sequence_ $ replicate flags_repeat greet
-- putStrLn $ "Your additional arguments were: " ++ show s
-- putStrLn $ "Which is the same as: " ++ show HFlags.arguments
-- where
-- greet = putStrLn $ "Hello " ++ flags_name ++ ", very nice to meet you!"
--
--
-- At initHFlags time, the library also tries to gather flags out
-- of environment variables. HFLAGS_verbose=True is equivalent
-- to specifying --verbose=True on the command line. This
-- environment feature only works with long options and the user has to
-- specify a value even for Bools.
--
-- Since version 0.2, you mustn't put the initHFlags in a parentheses
-- with the program description. Just $initHFlags, it's
-- cleaner.
module HFlags
-- | The most flexible way of defining a flag. For an example see
-- http://github.com/errge/hflags/blob/master/examples/ComplexExample.hs.
-- For most things defineFlag should be enough instead.
--
-- The parameters:
--
-- -- main = do args <- $initHFlags "Simple program v0.1" -- ... ---- -- Since version 0.2, you mustn't put the initHFlags in a parentheses -- with the program description. Just $initHFlags, it's -- cleaner. -- -- Internally, it uses Template Haskell trickery to gather all the -- instances of the Flag class and then generates a call to -- initFlags with the appropriate data gathered together from -- those instances to a list. -- -- Type after splicing is String -> IO [String]. initHFlags :: ExpQ -- | Same as initHFlags, but makes it possible to introduce programmatic -- defaults based on user supplied flag values. -- -- The second parameter has to be a function that gets the following -- alists: -- --
type AList = [(String, String)]
type DependentDefaults = AList -> AList -> AList -> -- AList