3import System.Console.Readline
5import System.Environment
10import Control.Monad.State
13import Core.ShellParser
23import Idris.Primitives
27-- Main program reads command line options, parses the main program, and gets
30data Opt = Filename String
39main = do xs <- getArgs
41 execStateT (runIdris opts) idrisInit
43runIdris :: [Opt] -> Idris ()
45 do let inputs = opt getFile opts
46 let runrepl = not (NoREPL `elem` opts)
47 let output = opt getOutput opts
50 when (not (NoPrelude `elem` opts)) $ do x <- loadModule "prelude"
52 when runrepl $ iputStrLn banner
54 mods <- mapM loadModule inputs
56 when ok $ case output of
58 (o:_) -> process (Compile o)
59 when runrepl $ repl ist inputs
61 makeOption (OLogging i) = setLogLevel i
62 makeOption TypeCase = setTypeCase True
63 makeOption _ = return ()
65getFile :: Opt -> Maybe String
66getFile (Filename str) = Just str
69getOutput :: Opt -> Maybe String
70getOutput (Output str) = Just str
73opt :: (Opt -> Maybe a) -> [Opt] -> [a]
76usage = do putStrLn "You're doing it wrong"
77 exitWith (ExitFailure 1)
79parseArgs :: [String] -> IO [Opt]
80parseArgs [] = return []
81parseArgs ("--log":lvl:ns) = liftM (OLogging (read lvl) : ) (parseArgs ns)
82parseArgs ("--noprelude":ns) = liftM (NoPrelude : ) (parseArgs ns)
83parseArgs ("--check":ns) = liftM (NoREPL : ) (parseArgs ns)
84parseArgs ("-o":n:ns) = liftM (\x -> NoREPL : Output n : x) (parseArgs ns)
85parseArgs ("--typecase":ns) = liftM (TypeCase : ) (parseArgs ns)
86parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
90 = do f <- readFile "test.mi"
95 case checkProgram emptyContext defs of
96 OK ctxt -> do print (toAlist ctxt)
97 runShell (initState ctxt)
102ver = showVersion version
104banner = " ____ __ _ \n" ++
105 " / _/___/ /____(_)____ \n" ++
106 " / // __ / ___/ / ___/ Version " ++ ver ++ "\n" ++
107 " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
108 " /___/\\__,_/_/ /_/____/ Type :? for help \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