module Haskell.AST where type Name = String type TyVar = String data AST = AST [Toplevel] deriving (Show) data Toplevel = TopDef Def | TopDecl Decl | TopData Data | TopClass Class | TopInst Inst deriving (Show) data Def = Def Name Expr deriving (Show) data Expr = App Expr [Expr] | Ref Name | LitNum Integer | Tup [Expr] | Lam [Name] Expr | Case Name [(Pat, Expr)] deriving (Show) data Pat = PatAny | PatVar Name | PatCon Name [Pat] | PatTup [Pat] deriving (Show) data Decl = Decl Name Type deriving (Show) data Type = TyTup [Type] | TyInt | TyFun Type Type | TyRef Name [Type] | TyVar Name | TyVoid deriving (Show) data Data = Data Name [TyVar] [(Name, [Type])] deriving (Show) data Class = Class Name [TyVar] [Decl] deriving (Show) data Inst = Inst Name Type [Def] deriving (Show)