let rec eval_toplevel ?(interactive=false) t =
match t.term with
| Let {doc=comment;
gen=generalized;
var=name;def=def;body=body} ->
let env = builtins#get_all in
let def = eval ~env def in
toplevel_add comment name ~generalized def ;
if debug then
Printf.eprintf "Added toplevel %s : %s\n"
name (T.print ~generalized def.V.t) ;
if interactive then
Format.printf "@[<2>%s :@ %a =@ %s@]@."
name
(T.pp_type_generalized generalized) def.V.t
(V.print_value def) ;
eval_toplevel ~interactive body
| Seq (a,b) ->
ignore
(let v = eval_toplevel a in
if v.V.t.T.pos = None then { v with V.t = a.t } else v) ;
eval_toplevel ~interactive b
| _ ->
let v = eval ~env:builtins#get_all t in
if interactive && t.term <> Unit then
Format.printf "- : %a = %s@."
T.pp_type v.V.t
(V.print_value v) ;
v