> module DHSOptions where > import System > import System.Console.GetOpt > data DHSOpts = DHSO {iface :: Maybe String} > data Opts = Interface String deriving (Eq) > options :: [OptDescr Opts] > options = > [Option ['i'] ["interface"] (ReqArg Interface "") "interface to listen on"] > getArgs = do > args <- catch (do System.getArgs) > (\_ -> return []) > let opts = case getOpt Permute options args of > (o,n,[] ) -> o > (_,_,errs) -> [] -- XXX > let i = foldl (\n x -> case x of Interface i -> (Just i) > _ -> n) Nothing opts > return (DHSO { iface = i})