anchor.diff:      in
       Util.abs (S.binders_of_list [ a; t1; t2; l; r ]) outer_body ret in
   
  -  (* Sanity check. *)
  -  ignore (tc_term env c_pure);
  -  ignore (tc_term env c_app);
  +  if !jonathan_temp_hack < 2 then
  +    (* Skip the first two effect definitions until Tot is properly defined and
  +     * can be composed with GTot. *)
  +    jonathan_temp_hack := !jonathan_temp_hack + 1
  +  else begin
  +    (* Sanity check. *)
  +    ignore (tc_term env c_pure);
  +    ignore (tc_term env c_app)
  +  end;
  +
  +  let check_and_gen' env (_,t) k =
  +    check_and_gen env t k in
   
     let ret =
       let expected_k = Util.arrow [S.mk_binder a; S.null_binder (S.bv_to_name a)] (S.mk_GTotal wp_a) in
  
positive.code: 
    (* If [binders] is [heap: Type], then this is [_: heap] *)
    let argument_bvs () =
      List.map (fun (bv, _) -> S.null_bv (S.bv_to_name bv)) binders in
  
    let argument_binders () =
      List.map S.mk_binder (argument_bvs ()) in
  
negative.code:     let a = S.new_bv None Util.ktype0 in
      let t = S.new_bv None Util.ktype0 in
      let x = S.new_bv None (S.bv_to_name t) in
      let ret = Some (Inl (Util.lcomp_of_comp (mk_Total (mk_ctx (S.bv_to_name a) (S.bv_to_name t))))) in
      let outer_body =
        let inner_binders = S.mk_binder (S.new_bv None (mk_post (S.bv_to_name a))) :: argument_binders () in
        let inner_body = S.bv_to_name x in
        Util.abs inner_binders inner_body ret
      in
  