on bbf672a help sign in
Idris-dev/main/Main.hs
101 lines 3.0 kB history raw
1module Main where
3import System.Console.Haskeline
4import System.IO
5import System.Environment
6import System.Exit
7import System.FilePath ((</>), addTrailingPathSeparator)
8import System.Directory
10import Data.Maybe
11import Data.Version
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 when (ShowPkgs `elem` opts) $ runIO showPkgs
50 case opt getClient opts of
51 [] -> return ()
52 (c:_) -> do setVerbose False
53 setQuiet True
54 runIO $ runClient (getPort opts) c
55 runIO $ exitWith ExitSuccess
56 case opt getPkgCheck opts of
57 [] -> return ()
58 fs -> do runIO $ mapM_ (checkPkg (WarnOnly `elem` opts) True) fs
59 runIO $ exitWith ExitSuccess
60 case opt getPkgClean opts of
61 [] -> return ()
62 fs -> do runIO $ mapM_ cleanPkg fs
63 runIO $ exitWith ExitSuccess
64 case opt getPkgMkDoc opts of -- IdrisDoc
65 [] -> return ()
66 fs -> do runIO $ mapM_ documentPkg fs
67 runIO $ exitWith ExitSuccess
68 case opt getPkgTest opts of
69 [] -> return ()
70 fs -> do runIO $ mapM_ testPkg fs
71 runIO $ exitWith ExitSuccess
72 case opt getPkg opts of
73 [] -> case opt getPkgREPL opts of
74 [] -> idrisMain opts
75 [f] -> replPkg f
76 _ -> ifail "Too many packages"
77 fs -> runIO $ mapM_ (buildPkg (WarnOnly `elem` opts)) fs
79showver :: IO b
80showver = do putStrLn $ "Idris version " ++ ver
81 exitWith ExitSuccess
83showLibs :: IO b
84showLibs = do libFlags <- getLibFlags
85 putStrLn $ unwords libFlags
86 exitWith ExitSuccess
88showLibdir :: IO b
89showLibdir = do dir <- getIdrisLibDir
90 putStrLn dir
91 exitWith ExitSuccess
93showIncs :: IO b
94showIncs = do incFlags <- getIncFlags
95 putStrLn $ unwords incFlags
96 exitWith ExitSuccess
98-- | List idris packages installed
99showPkgs :: IO b
100showPkgs = do mapM putStrLn =<< installedPackages
101 exitWith ExitSuccess