module AST (Ast(..)) where
data Ast = Define String Ast
| Value Int
| Boolean Bool
| String String
| List [Ast]
| Symbol String (Maybe [Ast])
| Call String [Ast]
| FunctionValue [String] Ast (Maybe [Ast])
| Cond Ast Ast (Maybe Ast)
deriving (Int -> Ast -> ShowS
[Ast] -> ShowS
Ast -> String
(Int -> Ast -> ShowS)
-> (Ast -> String) -> ([Ast] -> ShowS) -> Show Ast
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Ast -> ShowS
showsPrec :: Int -> Ast -> ShowS
$cshow :: Ast -> String
show :: Ast -> String
$cshowList :: [Ast] -> ShowS
showList :: [Ast] -> ShowS
Show, Ast -> Ast -> Bool
(Ast -> Ast -> Bool) -> (Ast -> Ast -> Bool) -> Eq Ast
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Ast -> Ast -> Bool
== :: Ast -> Ast -> Bool
$c/= :: Ast -> Ast -> Bool
/= :: Ast -> Ast -> Bool
Eq)