sig
module Ast :
sig
type label = string
type t =
Num of int
| Var of string
| Op of Op.t * O.Ast.t * O.Ast.t
| Ifz of O.Ast.t * O.Ast.t * O.Ast.t
| Let of string * O.Ast.t * O.Ast.t
| App of O.Ast.t * O.Ast.t
| Fun of string * O.Ast.t
| Fix of string * O.Ast.t
| Rec of (O.Ast.label * O.Ast.t) list
| Access of O.Ast.t * O.Ast.label
| CopyWith of O.Ast.t * (O.Ast.label * O.Ast.t) list
| Obj of string option * (O.Ast.label * O.Ast.t) list
| Invoke of O.Ast.t * O.Ast.label
| ObjWith of string option * O.Ast.t * (O.Ast.label * O.Ast.t) list
end
module Reader :
sig
val from_chan : Pervasives.in_channel -> O.Ast.t
val from_string : string -> O.Ast.t
end
module Top :
sig
val loop :
(Pervasives.out_channel -> 'a -> unit) ->
('a Env.t -> O.Ast.t -> 'a) -> unit
end
end