module Ast where import Text.Parsec (SourcePos) type Ident = String data Type = Type String | FuncType [Type] (Maybe Type) deriving (Eq, Ord, Show) type FuncParam = (Ident, Type, SourcePos) data Expr = Num Integer SourcePos | BinOp Op Expr Expr | Var Ident SourcePos | -- fn [params] return body private pos Func Ident [FuncParam] (Maybe Type) [Expr] Bool SourcePos | Call Expr [Expr] SourcePos | Return (Maybe Expr) SourcePos | Module String SourcePos deriving (Eq, Ord, Show) data Op = Plus | Minus | Mul | Div deriving (Eq, Ord, Show)