on 7afa310 help sign in
Idris-dev/main/Main.hs
95 lines 2.8 kB history raw
1module Main where
3import System.Console.Haskeline
4import System.IO
5import System.Environment
6import System.Exit
7import System.FilePath ((</>), addTrailingPathSeparator)
9import Data.Maybe
10import Data.Version
11import Control.Monad.Trans.Error ( ErrorT(..) )
12import Control.Monad.Trans.State.Strict ( execStateT, get, put )
13import Control.Monad ( when )
15import Idris.Core.TT
16import Idris.Core.Typecheck
17import Idris.Core.Evaluate
18import Idris.Core.Constraints
20import Idris.AbsSyntax
21import Idris.Parser
22import Idris.REPL
23import Idris.ElabDecls
24import Idris.Primitives
25import Idris.Imports
26import Idris.Error
27import Idris.CmdOptions
29import IRTS.System ( getLibFlags, getIdrisLibDir, getIncFlags )
31import Util.DynamicLinker
33import Pkg.Package
35import Paths_idris
37-- Main program reads command line options, parses the main program, and gets
38-- on with the REPL.
40main :: IO ()
41main = do opts <- runArgParser
42 runMain (runIdris opts)
44runIdris :: [Opt] -> Idris ()
45runIdris opts = do
46 when (ShowIncs `elem` opts) $ runIO showIncs
47 when (ShowLibs `elem` opts) $ runIO showLibs
48 when (ShowLibdir `elem` opts) $ runIO showLibdir
49 case opt getClient opts of
50 [] -> return ()
51 (c:_) -> do setVerbose False
52 setQuiet True
53 runIO $ runClient (getPort opts) c
54 runIO $ exitWith ExitSuccess
55 case opt getPkgCheck opts of
56 [] -> return ()
57 fs -> do runIO $ mapM_ (checkPkg (WarnOnly `elem` opts) True) fs
58 runIO $ exitWith ExitSuccess
59 case opt getPkgClean opts of
60 [] -> return ()
61 fs -> do runIO $ mapM_ cleanPkg fs
62 runIO $ exitWith ExitSuccess
63 case opt getPkgMkDoc opts of -- IdrisDoc
64 [] -> return ()
65 fs -> do runIO $ mapM_ documentPkg fs
66 runIO $ exitWith ExitSuccess
67 case opt getPkgTest opts of
68 [] -> return ()
69 fs -> do runIO $ mapM_ testPkg fs
70 runIO $ exitWith ExitSuccess
71 case opt getPkg opts of
72 [] -> case opt getPkgREPL opts of
73 [] -> idrisMain opts
74 [f] -> replPkg f
75 _ -> ifail "Too many packages"
76 fs -> runIO $ mapM_ (buildPkg (WarnOnly `elem` opts)) fs
78showver :: IO b
79showver = do putStrLn $ "Idris version " ++ ver
80 exitWith ExitSuccess
82showLibs :: IO b
83showLibs = do libFlags <- getLibFlags
84 putStrLn libFlags
85 exitWith ExitSuccess
87showLibdir :: IO b
88showLibdir = do dir <- getIdrisLibDir
89 putStrLn dir
90 exitWith ExitSuccess
92showIncs :: IO b
93showIncs = do incFlags <- getIncFlags
94 putStrLn incFlags
95 exitWith ExitSuccess