--- /dev/null
+module Parse ( ekitaiOpts ) where
+
+import System.Console.GetOpt
+import System.Environment
+import Data.Maybe
+import Data.Either
+
+data Options = Options
+ { optHelp :: Bool
+ , optColor :: Bool
+ }
+
+defaultOptions = Options
+ { optHelp = False
+ , optColor = False
+ }
+
+options :: [OptDescr (Options -> Options)]
+options =
+ [ Option ['h'] ["help"]
+ (NoArg (\ opts -> opts { optHelp = True }))
+ "display's this message"
+ , Option ['c'] ["color", "colour"]
+ (NoArg (\ opts -> opts { optColor = True }))
+ "enables color"
+ ]
+
+ekitaiOpts :: [String] -> IO (Options, String)
+ekitaiOpts argv =
+ case getOpt RequireOrder options argv of
+ (o, [n], []) -> return (foldl (flip id) defaultOptions o, n)
+ (o, _, []) -> ioError $ userError $ "must supply input file"
+ (_, _, errs) -> ioError $ userError $ (concat errs)
+