anchor.diff:                      | _ -> failwith "Impossible" in
   
       match mlAppExpr.expr, qual with
  -        | MLE_App ({expr=MLE_Name mlp}, [mlarg]), _ when (mlp=mlp_lalloc) -> 
  -          debug g (fun () -> Util.print_string "need to do lalloc surgery here\n"); 
  -          fix_lalloc mlarg
  -
           | _, None -> mlAppExpr
   
           | MLE_App({expr=MLE_Name mlp}, mle::args), Some (Record_projector f) ->
  
positive.code:                              let expected_t = translate_typ env expected_t in
                               let polytype = targs |> List.map (btvar_as_mltyvar << fst), expected_t in
                               let add_unit = match rest_args with
                                  | [] -> not (is_value_or_type_app body) //if it's a pure type app, then it will be extracted to a value in ML; so don't add a unit
                                  | _ -> false in
                               let rest_args = if add_unit then (unit_binder::rest_args) else rest_args in
                               let body = match rest_args with 
  
negative.code:                 | _ -> failwith "Expected a constructor" in
              let nTyVars = List.length (fst tys) in
              let tysVarPats, restPats =  Util.first_N nTyVars pats in
              let g, tyMLPats = Util.fold_map (fun g (p, imp) -> extract_one_pat disjunctive_pat true g p) g tysVarPats in (*not all of these were type vars in ML*)
              let g, restMLPats = Util.fold_map (fun g (p, imp) -> extract_one_pat disjunctive_pat false g p) g restPats in
              let mlPats, when_clauses = List.append tyMLPats restMLPats |> List.collect (function (Some x) -> [x] | _ -> []) |> List.split in
              g, Some (Util.resugar_pat None (MLP_CTor (d, mlPats)), when_clauses |> List.flatten)
  
  