(* AST *)

type comp = AstT.comp

type binop = 
  | Add | Sub | Mul | Div | Mod
  | Comp of comp
  | Concat | Assert | Semi

type unop = 
  | Addi of int | Minus | Excl

type cst = AstT.cst

type path = string

type fargs = path list

type program = elt list

and elt =
  | LetIgnore of expr
  | LetVar of path * expr
  | LetFun of path * fargs * expr

and expr =
  | Cst of cst
  | Var of path
  | App of path * (expr list)
  | AppT of path * (expr list)
  | Ref of expr
  | Binop of binop * expr * expr
  | Unop of unop * expr
  | IfThenElse of expr * expr * expr
  | LetIn of path * expr * expr
  | MatchWith of expr * expr * path * path * expr
