diff options
author | Tom Smeding <tom.smeding@gmail.com> | 2018-03-26 21:34:51 +0200 |
---|---|---|
committer | Tom Smeding <tom.smeding@gmail.com> | 2018-03-26 21:34:51 +0200 |
commit | 0e1f435314b382cb78056f04d0997df43e4f8fcf (patch) | |
tree | 8195b40c448cbbafc868a9727b6e1c218f26ca00 /AST.hs | |
parent | c25979b76c1dd22b6dc33acb994e9044c56a68f9 (diff) |
Rename files for case-sensitive file system
Diffstat (limited to 'AST.hs')
-rw-r--r-- | AST.hs | 46 |
1 files changed, 46 insertions, 0 deletions
@@ -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 |