anchor.diff:                      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}]), 
  +                            with_ty out.mlty <| MLE_Let((false, [{mllb_name=x; mllb_tysc=Some ([], arg.mlty); mllb_add_unit=false; mllb_def=arg; print_typ=true}]), 
                                                         out)) 
                           lbs app in // lets are to ensure L to R eval ordering of arguments
                       l_app, f, t
  
positive.code:               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
  
           (*after the above definitions, here is the main code for extracting let expressions*)
            let lbs = lbs |> List.map maybe_generalize in
  
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}] )
  