X-Git-Url: http://git.tomasm.cz/fp.git/blobdiff_plain/2df2a815f76afa2daee4c7c5494e15795876003e..0d7d9b4184cd881452d854cc571595f518fb1afe:/src/Main.hs diff --git a/src/Main.hs b/src/Main.hs index 4de3762..8253f88 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -1,46 +1,10 @@ -{-# OPTIONS_GHC -fno-warn-unused-do-bind #-} - module Main where -import Data.Text as T (Text) -import qualified Data.Text.IO as T -import Data.Attoparsec.Text -import qualified Data.Map as M -import Control.Applicative import System.Environment -import Lambda - -data Definition = Definition String Term - -dictionary :: [Definition] -> M.Map String Term -dictionary = M.fromList . map (\ (Definition s t) -> (s, t)) - -parseDefinition :: Parser Definition -parseDefinition = do - name <- many1 letter - char '=' - t <- parseTerm - return $! Definition name t - -parseFile :: Text -> ([Definition], [Term]) -parseFile txt = case cnt of - (Right t) -> t - (Left e) -> error e - where cnt = parseOnly (parserF <* endOfInput) txt - parserF = do - defs <- many (parseDefinition <* char '\n') - terms <- many (parseTerm <* char '\n') - return $! (defs, terms) - -printEval :: Term -> IO () -printEval t = do - putStrLn $ show t ++ ":" - putStrLn $ " " ++ show (reduce t) - putStrLn "" +import Lambda.Interpreter as L main :: IO () main = do [filename] <- getArgs - (defs, terms) <- parseFile <$> T.readFile filename - mapM_ printEval terms + L.interpret filename