summaryrefslogtreecommitdiff
path: root/transfer/trci.hs
blob: 3cfd02bd661c2249f494ad4d6e4ab702da7a7d1a (plain)
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
import Transfer.InterpreterAPI
import Transfer.Interpreter (prEnv)

import Control.Monad (when)
import Data.List (partition, isPrefixOf)
import System.Environment (getArgs)
import System.IO (isEOF)

interpretLoop :: Env -> IO ()
interpretLoop env = 
    do
    eof <- isEOF
    if eof
       then return ()
       else do
            line <- getLine
            r <- evaluateString env line
            putStrLn r
            interpretLoop env

runMain :: Env -> IO ()
runMain env = do
              r <- evaluateString env "main"
              putStrLn r

main :: IO ()
main = do args <- getArgs
          let (flags,files) = partition ("-" `isPrefixOf`) args
          env <- case files of
            [f] -> loadFile f
            _   -> fail "Usage: trci [-i] <file>"
          when ("-v" `elem` flags) $ do
                                     putStrLn "Top-level environment:"
                                     putStrLn (prEnv env)
          if "-i" `elem` flags 
            then interpretLoop env
            else runMain env