module Language.AST where data Ident = Ident String deriving (Eq, Ord, Show) data Expr = EVar Ident | ENand Expr Expr | ELit Bool | EApp Ident [Expr] deriving (Eq, Show) data Stmt = SDef Ident [Ident] Expr | SAssert Expr | SProve Ident Expr deriving (Eq, Show) data Module = Module { moduleName :: String , moduleStmts :: [Stmt] } deriving (Show) identName :: Ident -> String identName (Ident s) = s