-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMain.hs
50 lines (41 loc) · 1.5 KB
/
Main.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
module Main where
import Evaluator
import Parser
import Data
import Text.ParserCombinators.Parsec
main :: IO ()
main = undefined
getFileContent :: String -> IO String
getFileContent path = do
content <- getFileContent path
return content
printFileContent :: String -> IO ()
printFileContent path = do
content <- readFile path
putStr content
readLillaProgram :: String -> IO (Either ParseError LillaProgram)
readLillaProgram path = do
content <- readFile path
return $ parse (parseExprs 0) "lillaParser" content
printLillaProgram :: String -> IO ()
printLillaProgram path = readLillaProgram path >>= putStr . show
runParserOnScript :: String -> (String -> (Either ParseError LillaVal)) ->
IO (Either ParseError LillaVal)
runParserOnScript path f = do
content <- readFile path
putStr content
return $ f content
trapError :: ThrowsLillaError (LillaVal, LillaEnvironment) -> String
trapError (Left err) = show err
trapError (Right (_, env)) = showLillaEnvironment env
runLillaProgram :: String -> IO ()
runLillaProgram path = do
standards <- readLillaProgram "standards/standards.li"
lillaProgram <- readLillaProgram path
output <- return $ trapError $ (convertError (chain standards lillaProgram)) >>= run
putStr output where
convertError (Left err) = Left . ParseLillaError . show $ err
convertError (Right val) = return val
chain (Right p1) (Right p2) = Right $ p1 ++ p2
chain (Left err) _ = Left err
chain _ (Left err) = Left err