anchor.diff:    | TVar _ -> t
     | TBool _ -> t
     | TInt _ -> t
  -  | TTuple ts -> TTuple (List.map r ts)
  -  | TFun (ts, t) -> TFun (List.map r ts, r t)
  +  | TTuple ts -> t
  +  | TFun (ts, t) -> t
     | TDependent x ->
         let (_, x) = lookup_name env x true in
         TDependent x
  
positive.code:       let env = List.fold (fun env (x, t) -> let t = match t with Some t -> t | None -> u_next_type_var u in push_id env x t) env fs in
        let (t, ae) = infer_exp env u e expected_typ in
        u_constrain_subtype u t.norm_typ tProp;
        ret t (AE_Bind (b, [], fs, ts, ae))
    | EBind (Lambda, [], xs, ts, e) ->
        let xs = List.map (fun (x, t) -> match t with Some t -> (x, t) | None -> (x, u_next_type_var u)) xs in
        let env = List.fold (fun env (x, t) -> push_id env x t) env xs in
  
negative.code:   | ECast (e, tc) ->
        let (t, ae) = infer_exp env u e None in
        let ae = AE_Cast (ae, tc) in
        norm_ret tc ae
        //REVIEW: casts across arbitrary types seem to be useful (e.g. for module friends)
        //// TODO: move this check to after inference:
  