23 lines
674 B
Haskell
23 lines
674 B
Haskell
|
module Misc where
|
||
|
|
||
|
import qualified System.Console.GetOpt as GetOpt
|
||
|
import System.Environment
|
||
|
import System.Exit
|
||
|
|
||
|
-- | exception on 'Left'
|
||
|
unwrap :: Show a => FilePath -> Either a b -> IO b
|
||
|
unwrap file = either (\x -> fail $ file <> ":" <> show x) return
|
||
|
|
||
|
getOptionsWith :: (String -> String) -> ([String] -> Maybe a)
|
||
|
-> [GetOpt.OptDescr (a -> a)] -> IO a
|
||
|
getOptionsWith hdr mkDef descrs = do
|
||
|
res <- GetOpt.getOpt GetOpt.Permute descrs <$> getArgs
|
||
|
case res of
|
||
|
(fs, rest, []) | Just def <- mkDef rest ->
|
||
|
return $ foldl (flip ($)) def fs
|
||
|
_ -> do
|
||
|
prog <- getProgName
|
||
|
putStrLn $ GetOpt.usageInfo (hdr prog) descrs
|
||
|
exitFailure
|
||
|
|