@@ -30,7 +30,8 @@ import Paths_idris
3030-- on with the REPL.
3131
3232data Opt = Filename String
33− | Version
33+ | Ver
34+ | Usage
3435 | NoPrelude
3536 | NoREPL
3637 | OLogging Int
@@ -48,6 +49,8 @@ runIdris opts =
4849 do let inputs = opt getFile opts
4950 let runrepl = not (NoREPL `elem` opts)
5051 let output = opt getOutput opts
52+ when (Ver `elem` opts) $ lift showver
53+ when (Usage `elem` opts) $ lift usage
5154 setREPL runrepl
5255 mapM_ makeOption opts
5356 elabPrims
@@ -61,6 +64,8 @@ runIdris opts =
6164 [] -> return ()
6265 (o:_) -> process (Compile o)
6366 when runrepl $ repl ist inputs
67+ ok <- noErrors
68+ when (not ok) $ lift (exitWith (ExitFailure 1))
6469 where
6570 makeOption (OLogging i) = setLogLevel i
6671 makeOption TypeCase = setTypeCase True
@@ -78,8 +83,11 @@ getOutput _ = Nothing
7883opt :: (Opt -> Maybe a) -> [Opt] -> [a]
7984opt = mapMaybe
8085
81−usage = do putStrLn "You're doing it wrong"
82− exitWith (ExitFailure 1)
86+usage = do putStrLn usagemsg
87+ exitWith ExitSuccess
88+
89+showver = do putStrLn $ "Idris version " ++ ver
90+ exitWith ExitSuccess
8391
8492parseArgs :: [String] -> IO [Opt]
8593parseArgs [] = return []
@@ -89,22 +97,10 @@ parseArgs ("--check":ns) = liftM (NoREPL : ) (parseArgs ns)
8997parseArgs ("-o":n:ns) = liftM (\x -> NoREPL : Output n : x) (parseArgs ns)
9098parseArgs ("--typecase":ns) = liftM (TypeCase : ) (parseArgs ns)
9199parseArgs ("--typeintype":ns) = liftM (TypeInType : ) (parseArgs ns)
100+parseArgs ("--help":ns) = liftM (Usage : ) (parseArgs ns)
101+parseArgs ("--version":ns) = liftM (Ver : ) (parseArgs ns)
92102parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
93103
94−{-
95−main'
96− = do f <- readFile "test.mi"
97− case parseFile f of
98− Left err -> print err
99− Right defs -> do
100− print defs
101− case checkProgram emptyContext defs of
102− OK ctxt -> do print (toAlist ctxt)
103− runShell (initState ctxt)
104− return ()
105− err -> print err
106− -}
107−
108104ver = showVersion version
109105
110106banner = " ____ __ _ \n" ++
@@ -113,3 +109,13 @@ banner = " ____ __ _ \n" ++
113109 " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
114110 " /___/\\__,_/_/ /_/____/ Type :? for help \n"
115111
112+usagemsg = "Idris version " ++ ver ++ "\n" ++
113+ "--------------" ++ map (\x -> '-') ver ++ "\n" ++
114+ "Usage: idris [input file] [options]\n" ++
115+ "Options:\n" ++
116+ "\t--check Type check only\n" ++
117+ "\t-o [file] Generate executable\n" ++
118+ "\t--noprelude Don't import the prelude\n" ++
119+ "\t--typeintype Disable universe checking\n" ++
120+ "\t--log [level] Set debugging log level\n"
121+