git.iko.soy/rowtype-yoga/purescript-native
on 558cd4e help sign in
73 lines 2.1 kB history raw
1-----------------------------------------------------------------------------
2--
3-- Module : Main
4-- Copyright : (c) Phil Freeman 2013
5-- License : MIT
6--
7-- Maintainer : Phil Freeman <paf31@cantab.net>
8-- Stability : experimental
9-- Portability :
10--
11-- |
12--
13-----------------------------------------------------------------------------
15module Main where
17import qualified Language.PureScript as P
18import Data.Maybe (mapMaybe)
19import Data.List (intercalate)
20import System.Console.CmdTheLine
21import Control.Applicative
22import Control.Monad (forM)
23import System.Exit (exitSuccess, exitFailure)
24import qualified Text.Parsec as P
25import qualified System.IO.UTF8 as U
26import qualified Data.Map as M
28compile :: [FilePath] -> Maybe FilePath -> Maybe FilePath -> IO ()
29compile inputFiles outputFile externsFile = do
30 asts <- fmap (fmap concat . sequence) $ forM inputFiles $ \inputFile -> do
31 text <- U.readFile inputFile
32 return $ P.runIndentParser P.parseDeclarations text
33 case asts of
34 Left err -> do
35 U.print err
36 exitFailure
37 Right decls ->
38 case P.compile decls of
39 Left error -> do
40 U.putStrLn error
41 exitFailure
42 Right (js, exts, _) -> do
43 case outputFile of
44 Just path -> U.writeFile path js
45 Nothing -> U.putStrLn js
46 case externsFile of
47 Nothing -> return ()
48 Just filePath -> U.writeFile filePath exts
49 exitSuccess
51inputFiles :: Term [FilePath]
52inputFiles = nonEmpty $ posAny [] $ posInfo
53 { posDoc = "The input .ps files" }
55outputFile :: Term (Maybe FilePath)
56outputFile = value $ opt Nothing $ (optInfo [ "o", "output" ])
57 { optDoc = "The output .js file" }
59externsFile :: Term (Maybe FilePath)
60externsFile = value $ opt Nothing $ (optInfo [ "e", "externs" ])
61 { optDoc = "The output .e.ps file" }
63term :: Term (IO ())
64term = compile <$> inputFiles <*> outputFile <*> externsFile
66termInfo :: TermInfo
67termInfo = defTI
68 { termName = "psc"
69 , version = "1.0"
70 , termDoc = "Compiles PureScript to Javascript"
71 }
73main = run (term, termInfo)