{-
-- EPITECH PROJECT, 2023
-- GLaDOS
-- File description:
-- AST
-}

module AST (Ast(..)) where

-- | Abstract syntax tree for representing instructions
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)