module JS.Ast where import qualified Data.Map as M import qualified Data.Text as T type Var = T.Text type Record a = M.Map Var a data Lit = LInt Int | LBool Bool | LFloat Float | LString T.Text deriving (Int -> Lit -> ShowS [Lit] -> ShowS Lit -> String (Int -> Lit -> ShowS) -> (Lit -> String) -> ([Lit] -> ShowS) -> Show Lit forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Lit] -> ShowS $cshowList :: [Lit] -> ShowS show :: Lit -> String $cshow :: Lit -> String showsPrec :: Int -> Lit -> ShowS $cshowsPrec :: Int -> Lit -> ShowS Show, Lit -> Lit -> Bool (Lit -> Lit -> Bool) -> (Lit -> Lit -> Bool) -> Eq Lit forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Lit -> Lit -> Bool $c/= :: Lit -> Lit -> Bool == :: Lit -> Lit -> Bool $c== :: Lit -> Lit -> Bool Eq) data Statement = SExpr Expr | SRet Expr | SDef Definition | SIf Expr Sub deriving (Int -> Statement -> ShowS [Statement] -> ShowS Statement -> String (Int -> Statement -> ShowS) -> (Statement -> String) -> ([Statement] -> ShowS) -> Show Statement forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Statement] -> ShowS $cshowList :: [Statement] -> ShowS show :: Statement -> String $cshow :: Statement -> String showsPrec :: Int -> Statement -> ShowS $cshowsPrec :: Int -> Statement -> ShowS Show, Statement -> Statement -> Bool (Statement -> Statement -> Bool) -> (Statement -> Statement -> Bool) -> Eq Statement forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Statement -> Statement -> Bool $c/= :: Statement -> Statement -> Bool == :: Statement -> Statement -> Bool $c== :: Statement -> Statement -> Bool Eq) type Sub = [Statement] data Expr = ELit Lit | EVar Var | EFun [Var] Sub | EFunCall Expr [Expr] | ERecord (Record Expr) | EAnd [Expr] | EEqual Expr Expr | ERecordAccess Expr Label | EBinOp T.Text Expr Expr | ERaw T.Text deriving (Int -> Expr -> ShowS [Expr] -> ShowS Expr -> String (Int -> Expr -> ShowS) -> (Expr -> String) -> ([Expr] -> ShowS) -> Show Expr forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Expr] -> ShowS $cshowList :: [Expr] -> ShowS show :: Expr -> String $cshow :: Expr -> String showsPrec :: Int -> Expr -> ShowS $cshowsPrec :: Int -> Expr -> ShowS Show, Expr -> Expr -> Bool (Expr -> Expr -> Bool) -> (Expr -> Expr -> Bool) -> Eq Expr forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Expr -> Expr -> Bool $c/= :: Expr -> Expr -> Bool == :: Expr -> Expr -> Bool $c== :: Expr -> Expr -> Bool Eq) type Label = T.Text data Definition = Variable Var Expr | Function Var [Var] Sub deriving (Int -> Definition -> ShowS [Definition] -> ShowS Definition -> String (Int -> Definition -> ShowS) -> (Definition -> String) -> ([Definition] -> ShowS) -> Show Definition forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Definition] -> ShowS $cshowList :: [Definition] -> ShowS show :: Definition -> String $cshow :: Definition -> String showsPrec :: Int -> Definition -> ShowS $cshowsPrec :: Int -> Definition -> ShowS Show, Definition -> Definition -> Bool (Definition -> Definition -> Bool) -> (Definition -> Definition -> Bool) -> Eq Definition forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Definition -> Definition -> Bool $c/= :: Definition -> Definition -> Bool == :: Definition -> Definition -> Bool $c== :: Definition -> Definition -> Bool Eq) newtype File = File [Statement] deriving (Int -> File -> ShowS [File] -> ShowS File -> String (Int -> File -> ShowS) -> (File -> String) -> ([File] -> ShowS) -> Show File forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [File] -> ShowS $cshowList :: [File] -> ShowS show :: File -> String $cshow :: File -> String showsPrec :: Int -> File -> ShowS $cshowsPrec :: Int -> File -> ShowS Show, File -> File -> Bool (File -> File -> Bool) -> (File -> File -> Bool) -> Eq File forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: File -> File -> Bool $c/= :: File -> File -> Bool == :: File -> File -> Bool $c== :: File -> File -> Bool Eq)