let check ?(ignored=false) e =
  let print_toplevel = !Configure.display_types in
    try
      check ~print_toplevel ~level:(List.length builtins#get_all) ~env:[] e ;
      if print_toplevel && (T.deref e.t).T.descr <> T.Ground T.Unit then
        add_task (fun () ->
          Format.printf "@[<2>-     :@ %a@]@." T.pp_type e.t) ;
      if ignored && not (can_ignore e.t) then raise_ignored e ;
      pop_tasks ()
    with
      | e -> pop_tasks () ; raise e