anchor.diff:         let rec curry hd args =
          match args with
          | [] -> hd
  -       | [arg] -> app cfg hd (fst arg) (snd arg)
  -       | arg :: args -> app cfg (curry hd args) (fst arg) (snd arg)
  +       | [arg] -> app hd (fst arg) (snd arg)
  +       | arg :: args -> app (curry hd args) (fst arg) (snd arg)
          in
          let args_no = count_abstractions lb.lbdef in
          // Printf.printf "Args no. %d\n" args_no;
  
positive.code:            else []
         in
         let t =
         iapp cfg (iapp cfg (translate cfg' [] (U.un_uinst (snd ed.bind_repr)))
                        [Univ U_unknown, None;  //We are cheating here a bit
                        Univ U_unknown, None])  //to avoid re-computing the universe of lb.lbtyp
                                                //and ty below; but this should be okay since these
  
negative.code: 
      | Tm_app(head, args) ->
        debug (fun () -> BU.print2 "Application: %s @ (%s)\n" (P.term_to_string head) (P.args_to_string args));
        iapp (translate cfg bs head) (List.map (fun x -> (translate cfg bs (fst x), snd x)) args) // Zoe : TODO avoid translation pass for args
  
      | Tm_match(scrut, branches) ->
        let rec case (scrut : t) : t =
  