anchor.diff:                let env = List.fold_left (fun env (a, _) -> UEnv.extend_ty env a None) env targs in
                 let expected_t = if add_unit then MLTY_Fun(ml_unit_ty, E_PURE, snd polytype) else snd polytype in
                 let e, _ = check_term_as_mlexpr env e f expected_t in
  -              f, {mllb_name=nm; mllb_tysc=Some polytype; mllb_add_unit=add_unit; mllb_def=e} in
  +              f, {mllb_name=nm; mllb_tysc=Some polytype; mllb_add_unit=add_unit; mllb_def=e; print_typ=true} in
   
            (*after the above definitions, here is the main code for extracting let expressions*)
             let lbs = lbs |> List.map maybe_generalize in
  
positive.code:                     let app = maybe_eta_data_and_project_record g is_data t <| (with_ty t <| MLE_App(mlhead, mlargs)) in
                      let l_app = List.fold_right 
                          (fun (x, arg) out -> 
                              with_ty out.mlty <| MLE_Let((false, [{mllb_name=x; mllb_tysc=Some ([], arg.mlty); mllb_add_unit=false; mllb_def=arg}]), 
                                                        out)) 
                          lbs app in // lets are to ensure L to R eval ordering of arguments
                      l_app, f, t
  
negative.code:                                     // Note: it is legal in OCaml to write [Foo _] for a constructor with zero arguments, so don't bother.
                                     [MLP_CTor(mlpath_of_lident constrName, [MLP_Wild]), None, with_ty ml_bool_ty <| MLE_Const(MLC_Bool true);
                                      MLP_Wild, None, with_ty ml_bool_ty <| MLE_Const(MLC_Bool false)]))) in
      MLM_Let (false,[{mllb_name=convIdent discName.ident; mllb_tysc=None; mllb_add_unit=false; mllb_def=discrBody; print_typ=false}] )
  