From 622dce0e578fb505cb1c357c13a657c697067731 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Fri, 26 Jul 2013 16:45:50 +0200 Subject: [PATCH] added better eval --- y.hs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/y.hs b/y.hs index 193fea8..17c0552 100644 --- a/y.hs +++ b/y.hs @@ -18,16 +18,14 @@ data LispVal = Atom String -- The program (in IO) -- execute the arguments given in parameters main :: IO () -main = do - args <- getArgs - putStrLn (readExpr (args !!0)) +main = getArgs >>= print . eval . readExpr . head -- ReadExpr will take a program as input -- and will return the result of a parseExpr -readExpr :: String -> String +readExpr :: String -> LispVal readExpr input = case parse parseExpr "lisp" input of - Left err -> "No match: " ++ show err - Right val -> show val + Left err -> String $ "No match: " ++ show err + Right val -> val showVal :: LispVal -> String showVal (String contents) = "\"" ++ contents ++ "\"" @@ -176,3 +174,12 @@ parseQuoted = do char '\'' x <- parseExpr return $ List [Atom "quote", x] + +-- Evaluation +eval :: LispVal -> LispVal +eval val@(Character _) = val +eval val@(String _) = val +eval val@(Number _) = val +eval val@(Float _) = val +eval val@(Bool _) = val +eval (List [Atom "quote", val]) = val