3import System.Console.Haskeline
5import System.Environment
10import Control.Monad.State
13import Core.ShellParser
18import Core.Constraints
24import Idris.Primitives
33-- Main program reads command line options, parses the main program, and gets
36main = do xs <- getArgs
38 runInputT defaultSettings $ execStateT (runIdris opts) idrisInit
40runIdris :: [Opt] -> Idris ()
42 do let inputs = opt getFile opts
43 let runrepl = not (NoREPL `elem` opts)
44 let output = opt getOutput opts
45 let newoutput = opt getNewOutput opts
46 let ibcsubdir = opt getIBCSubDir opts
47 let importdirs = opt getImportDir opts
48 let bcs = opt getBC opts
49 let vm = opt getFOVM opts
51 when (Ver `elem` opts) $ liftIO showver
52 when (Usage `elem` opts) $ liftIO usage
53 when (ShowIncs `elem` opts) $ liftIO showIncs
54 when (ShowLibs `elem` opts) $ liftIO showLibs
57 when (Verbose `elem` opts) $ setVerbose True
59 -- if we have the --fovm flag, drop into the first order VM testing
62 xs -> liftIO $ mapM_ fovm xs
63 -- if we have the --bytecode flag, drop into the bytecode assembler
66 xs -> return () -- liftIO $ mapM_ bcAsm xs
69 (d:_) -> setIBCSubDir d
70 setImportDirs importdirs
72 when (not (NoPrelude `elem` opts)) $ do x <- loadModule "prelude"
74 when runrepl $ iputStrLn banner
76 mods <- mapM loadModule inputs
78 when ok $ case output of
80 (o:_) -> process "" (Compile o)
81 when ok $ case newoutput of
83 (o:_) -> process "" (NewCompile o)
84 when runrepl $ repl ist inputs
86 when (not ok) $ liftIO (exitWith (ExitFailure 1))
88 makeOption (OLogging i) = setLogLevel i
89 makeOption TypeCase = setTypeCase True
90 makeOption TypeInType = setTypeInType True
91 makeOption NoCoverage = setCoverage False
92 makeOption ErrContext = setErrContext True
93 makeOption _ = return ()
95getFile :: Opt -> Maybe String
96getFile (Filename str) = Just str
99getBC :: Opt -> Maybe String
100getBC (BCAsm str) = Just str
103getFOVM :: Opt -> Maybe String
104getFOVM (FOVM str) = Just str
107getOutput :: Opt -> Maybe String
108getOutput (Output str) = Just str
111getNewOutput :: Opt -> Maybe String
112getNewOutput (NewOutput str) = Just str
113getNewOutput _ = Nothing
115getIBCSubDir :: Opt -> Maybe String
116getIBCSubDir (IBCSubDir str) = Just str
117getIBCSubDir _ = Nothing
119getImportDir :: Opt -> Maybe String
120getImportDir (ImportDir str) = Just str
121getImportDir _ = Nothing
123opt :: (Opt -> Maybe a) -> [Opt] -> [a]
126usage = do putStrLn usagemsg
129showver = do putStrLn $ "Idris version " ++ ver
132showLibs = do dir <- getDataDir
133 putStrLn $ "-L" ++ dir ++ "/rts -lidris_rts"
136showIncs = do dir <- getDataDir
137 putStrLn $ "-I" ++ dir ++ "/rts"
140parseArgs :: [String] -> IO [Opt]
141parseArgs [] = return []
142parseArgs ("--log":lvl:ns) = liftM (OLogging (read lvl) : ) (parseArgs ns)
143parseArgs ("--noprelude":ns) = liftM (NoPrelude : ) (parseArgs ns)
144parseArgs ("--check":ns) = liftM (NoREPL : ) (parseArgs ns)
145parseArgs ("-o":n:ns) = liftM (\x -> NoREPL : Output n : x) (parseArgs ns)
146parseArgs ("-no":n:ns) = liftM (\x -> NoREPL : NewOutput n : x) (parseArgs ns)
147parseArgs ("--typecase":ns) = liftM (TypeCase : ) (parseArgs ns)
148parseArgs ("--typeintype":ns) = liftM (TypeInType : ) (parseArgs ns)
149parseArgs ("--nocoverage":ns) = liftM (NoCoverage : ) (parseArgs ns)
150parseArgs ("--errorcontext":ns) = liftM (ErrContext : ) (parseArgs ns)
151parseArgs ("--help":ns) = liftM (Usage : ) (parseArgs ns)
152parseArgs ("--link":ns) = liftM (ShowLibs : ) (parseArgs ns)
153parseArgs ("--include":ns) = liftM (ShowIncs : ) (parseArgs ns)
154parseArgs ("--version":ns) = liftM (Ver : ) (parseArgs ns)
155parseArgs ("--verbose":ns) = liftM (Verbose : ) (parseArgs ns)
156parseArgs ("--ibcsubdir":n:ns) = liftM (IBCSubDir n : ) (parseArgs ns)
157parseArgs ("-i":n:ns) = liftM (ImportDir n : ) (parseArgs ns)
158parseArgs ("--bytecode":n:ns) = liftM (\x -> NoREPL : BCAsm n : x) (parseArgs ns)
159parseArgs ("--fovm":n:ns) = liftM (\x -> NoREPL : FOVM n : x) (parseArgs ns)
160parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
162ver = showVersion version
164banner = " ____ __ _ \n" ++
165 " / _/___/ /____(_)____ \n" ++
166 " / // __ / ___/ / ___/ Version " ++ ver ++ "\n" ++
167 " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
168 " /___/\\__,_/_/ /_/____/ Type :? for help \n"
170usagemsg = "Idris version " ++ ver ++ "\n" ++
171 "--------------" ++ map (\x -> '-') ver ++ "\n" ++
172 "Usage: idris [input file] [options]\n" ++
174 "\t--check Type check only\n" ++
175 "\t-o [file] Generate executable\n" ++
176 "\t-i [dir] Add directory to the list of import paths\n" ++
177 "\t--ibcsubdir [dir] Write IBC files into sub directory\n" ++
178 "\t--noprelude Don't import the prelude\n" ++
179 "\t--typeintype Disable universe checking\n" ++
180 "\t--log [level] Set debugging log level\n" ++
181 "\t--link Show library directories and exit (for C linking)\n" ++
182 "\t--include Show include directories and exit (for C linking)\n"
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list