anchor.diff:            let env_tps, tps = push_tparams env tpars in
             let data_tpars = List.map (fun (x, _) -> (x, Some (S.Implicit true))) tps in
             let tot_tconstr = mk_tot tconstr in
  +          let attrs = List.map (desugar_term env) d.attrs in
  +          let val_attrs = Env.lookup_letbinding_quals_and_attrs env tname |> snd in
             let constrNames, constrs = List.split <|
                 (constrs |> List.map (fun (id, topt, doc, of_notation) ->
                   let t =
  
positive.code:       sigquals = quals;
        sigrng = rng;
        sigmeta = default_sigmeta ;
        sigattrs = [];
        sigopts = None; }
  
  let rec desugar_tycon env (d: AST.decl) quals tcs : (env_t * sigelts) =
  
negative.code:   let env0 = Env.snapshot env |> snd in (* we need the snapshot since pushing the let
                                           * will shadow a previous val *)
    let env, sigelts = desugar_decl_noattrs env d in
    let attrs = List.map (desugar_term env) d.attrs in
    let val_attrs =
      match sigelts with
      | [{ sigel = Sig_let _}]
      |  { sigel = Sig_inductive_typ _ } :: _ ->
        lids_of_sigelt (List.hd sigelts) |>
        List.collect (fun nm -> snd (Env.lookup_letbinding_quals_and_attrs env0 nm)) |>
        List.filter (fun t -> Option.isNone (get_fail_attr false t)) //don't forward fail attributes
      | _ -> []
  