summaryrefslogtreecommitdiff
path: root/AST.hs
diff options
context:
space:
mode:
Diffstat (limited to 'AST.hs')
-rw-r--r--AST.hs46
1 files changed, 46 insertions, 0 deletions
diff --git a/AST.hs b/AST.hs
new file mode 100644
index 0000000..eae5af8
--- /dev/null
+++ b/AST.hs
@@ -0,0 +1,46 @@
+module AST where
+
+import Data.List
+
+
+data Program = Program [Value]
+
+type Name = String
+
+data Value
+ = VList [Value]
+ | VNum Int
+ | VString String
+ | VName Name
+ | VQuoted Value
+ | VLambda [Name] Value
+ | VBuiltin String
+ | VEllipsis
+ deriving (Eq)
+
+
+instance Show Program where
+ show (Program l) = intercalate "\n" $ map show l
+
+instance Show Value where
+ show (VList es) = '(' : intercalate " " (map show es) ++ ")"
+ show (VNum i) = show i
+ show (VString s) = show s
+ show (VName n) = n
+ show (VQuoted e) = '\'' : show e
+ show (VLambda as v) = "(lambda (" ++ intercalate " " as ++ ") " ++ show v ++ ")"
+ show (VBuiltin str) = "[[builtin " ++ str ++ "]]"
+ show VEllipsis = "..."
+
+
+fromVName :: Value -> Maybe Name
+fromVName (VName s) = Just s
+fromVName _ = Nothing
+
+fromVNum :: Value -> Maybe Int
+fromVNum (VNum i) = Just i
+fromVNum _ = Nothing
+
+fromVString :: Value -> Maybe String
+fromVString (VString s) = Just s
+fromVString _ = Nothing