lamb/lamb.hs

30 lines
891 B
Haskell

-- Driver for the Lamb programming language
-- Copyright (c) 2013 darkf
-- Licensed under the terms of the zlib license, see LICENSE for details
import System.Environment (getArgs)
import System.Directory (doesFileExist)
import Interp (evalProgram, evalString, Value(UnitV))
-- returns Nothing if all files exist, or Just path for the first one that doesn't
allExist :: [String] -> IO (Maybe String)
allExist [] = return Nothing
allExist (x:xs) = do
exists <- doesFileExist x
if exists then allExist xs
else return $ Just x
evalFile :: String -> IO Value
evalFile path = do
contents <- readFile path
let ev = evalString contents
if ev == UnitV then return ev else return ev -- this is just to force evaluation
main = do
args <- getArgs
exist <- allExist args
case exist of
Just file -> putStrLn $ "error: file " ++ file ++ " doesn't exist"
Nothing ->
mapM_ evalFile args