@@ -30,7 +30,8 @@ import Paths_idris
30-- on with the REPL.
30-- on with the REPL.
32data Opt = Filename String
32data Opt = Filename String
34 | NoPrelude
35 | NoPrelude
36 | OLogging Int
37 | OLogging Int
@@ -48,6 +49,8 @@ runIdris opts =
48 do let inputs = opt getFile opts
49 do let inputs = opt getFile opts
49 let runrepl = not (NoREPL `elem` opts)
50 let runrepl = not (NoREPL `elem` opts)
50 let output = opt getOutput opts
51 let output = opt getOutput opts
52+ when (Ver `elem` opts) $ lift showver
53+ when (Usage `elem` opts) $ lift usage
51 setREPL runrepl
54 setREPL runrepl
52 mapM_ makeOption opts
55 mapM_ makeOption opts
@@ -61,6 +64,8 @@ runIdris opts =
61 [] -> return ()
64 [] -> return ()
62 (o:_) -> process (Compile o)
65 (o:_) -> process (Compile o)
63 when runrepl $ repl ist inputs
66 when runrepl $ repl ist inputs
68+ when (not ok) $ lift (exitWith (ExitFailure 1))
65 makeOption (OLogging i) = setLogLevel i
70 makeOption (OLogging i) = setLogLevel i
66 makeOption TypeCase = setTypeCase True
71 makeOption TypeCase = setTypeCase True
@@ -78,8 +83,11 @@ getOutput _ = Nothing
78opt :: (Opt -> Maybe a) -> [Opt] -> [a]
83opt :: (Opt -> Maybe a) -> [Opt] -> [a]
79opt = mapMaybe
84opt = mapMaybe
81−usage = do putStrLn "You're doing it wrong"
86+usage = do putStrLn usagemsg
82− exitWith (ExitFailure 1)
87+ exitWith ExitSuccess
89+showver = do putStrLn $ "Idris version " ++ ver
84parseArgs :: [String] -> IO [Opt]
92parseArgs :: [String] -> IO [Opt]
85parseArgs [] = return []
93parseArgs [] = return []
@@ -89,22 +97,10 @@ parseArgs ("--check":ns) = liftM (NoREPL : ) (parseArgs ns)
89parseArgs ("-o":n:ns) = liftM (\x -> NoREPL : Output n : x) (parseArgs ns)
97parseArgs ("-o":n:ns) = liftM (\x -> NoREPL : Output n : x) (parseArgs ns)
90parseArgs ("--typecase":ns) = liftM (TypeCase : ) (parseArgs ns)
98parseArgs ("--typecase":ns) = liftM (TypeCase : ) (parseArgs ns)
91parseArgs ("--typeintype":ns) = liftM (TypeInType : ) (parseArgs ns)
99parseArgs ("--typeintype":ns) = liftM (TypeInType : ) (parseArgs ns)
100+parseArgs ("--help":ns) = liftM (Usage : ) (parseArgs ns)
101+parseArgs ("--version":ns) = liftM (Ver : ) (parseArgs ns)
92parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
102parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
96− = do f <- readFile "test.mi"
98− Left err -> print err
101− case checkProgram emptyContext defs of
102− OK ctxt -> do print (toAlist ctxt)
103− runShell (initState ctxt)
108ver = showVersion version
104ver = showVersion version
110banner = " ____ __ _ \n" ++
106banner = " ____ __ _ \n" ++
@@ -113,3 +109,13 @@ banner = " ____ __ _ \n" ++
113 " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
109 " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
114 " /___/\\__,_/_/ /_/____/ Type :? for help \n"
110 " /___/\\__,_/_/ /_/____/ Type :? for help \n"
112+usagemsg = "Idris version " ++ ver ++ "\n" ++
113+ "--------------" ++ map (\x -> '-') ver ++ "\n" ++
114+ "Usage: idris [input file] [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"