3import System.Console.Haskeline
5import System.Environment
10import Control.Monad.State
13import Core.ShellParser
18import Core.Constraints
24import Idris.Primitives
29-- Main program reads command line options, parses the main program, and gets
32data Opt = Filename String
47main = do xs <- getArgs
49 runInputT defaultSettings $ execStateT (runIdris opts) idrisInit
51runIdris :: [Opt] -> Idris ()
53 do let inputs = opt getFile opts
54 let runrepl = not (NoREPL `elem` opts)
55 let output = opt getOutput opts
56 let ibcsubdir = opt getIBCSubDir opts
57 let importdirs = opt getImportDir opts
58 when (Ver `elem` opts) $ liftIO showver
59 when (Usage `elem` opts) $ liftIO usage
62 when (Verbose `elem` opts) $ setVerbose True
66 (d:_) -> setIBCSubDir d
67 setImportDirs importdirs
69 when (not (NoPrelude `elem` opts)) $ do x <- loadModule "prelude"
71 when runrepl $ iputStrLn banner
73 mods <- mapM loadModule inputs
75 when ok $ case output of
77 (o:_) -> process "" (Compile o)
78 when runrepl $ repl ist inputs
80 when (not ok) $ liftIO (exitWith (ExitFailure 1))
82 makeOption (OLogging i) = setLogLevel i
83 makeOption TypeCase = setTypeCase True
84 makeOption TypeInType = setTypeInType True
85 makeOption NoCoverage = setCoverage False
86 makeOption _ = return ()
88getFile :: Opt -> Maybe String
89getFile (Filename str) = Just str
92getOutput :: Opt -> Maybe String
93getOutput (Output str) = Just str
96getIBCSubDir :: Opt -> Maybe String
97getIBCSubDir (IBCSubDir str) = Just str
98getIBCSubDir _ = Nothing
100getImportDir :: Opt -> Maybe String
101getImportDir (ImportDir str) = Just str
102getImportDir _ = Nothing
104opt :: (Opt -> Maybe a) -> [Opt] -> [a]
107usage = do putStrLn usagemsg
110showver = do putStrLn $ "Idris version " ++ ver
113parseArgs :: [String] -> IO [Opt]
114parseArgs [] = return []
115parseArgs ("--log":lvl:ns) = liftM (OLogging (read lvl) : ) (parseArgs ns)
116parseArgs ("--noprelude":ns) = liftM (NoPrelude : ) (parseArgs ns)
117parseArgs ("--check":ns) = liftM (NoREPL : ) (parseArgs ns)
118parseArgs ("-o":n:ns) = liftM (\x -> NoREPL : Output n : x) (parseArgs ns)
119parseArgs ("--typecase":ns) = liftM (TypeCase : ) (parseArgs ns)
120parseArgs ("--typeintype":ns) = liftM (TypeInType : ) (parseArgs ns)
121parseArgs ("--nocoverage":ns) = liftM (NoCoverage : ) (parseArgs ns)
122parseArgs ("--help":ns) = liftM (Usage : ) (parseArgs ns)
123parseArgs ("--version":ns) = liftM (Ver : ) (parseArgs ns)
124parseArgs ("--verbose":ns) = liftM (Verbose : ) (parseArgs ns)
125parseArgs ("--ibcsubdir":n:ns) = liftM (IBCSubDir n : ) (parseArgs ns)
126parseArgs ("-i":n:ns) = liftM (ImportDir n : ) (parseArgs ns)
127parseArgs (n:ns) = liftM (Filename n : ) (parseArgs ns)
129ver = showVersion version
131banner = " ____ __ _ \n" ++
132 " / _/___/ /____(_)____ \n" ++
133 " / // __ / ___/ / ___/ Version " ++ ver ++ "\n" ++
134 " _/ // /_/ / / / (__ ) http://www.idris-lang.org/ \n" ++
135 " /___/\\__,_/_/ /_/____/ Type :? for help \n"
137usagemsg = "Idris version " ++ ver ++ "\n" ++
138 "--------------" ++ map (\x -> '-') ver ++ "\n" ++
139 "Usage: idris [input file] [options]\n" ++
141 "\t--check Type check only\n" ++
142 "\t-o [file] Generate executable\n" ++
143 "\t-i [dir] Add directory to the list of import paths\n" ++
144 "\t--ibcsubdir [dir] Write IBC files into sub directory\n" ++
145 "\t--noprelude Don't import the prelude\n" ++
146 "\t--typeintype Disable universe checking\n" ++
147 "\t--log [level] Set debugging log level\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