anchor.diff:    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 = d.attrs in
  -  let attrs = List.map (desugar_term env) attrs in
  +  let attrs = List.map (desugar_term env) d.attrs in
     let val_attrs =
       match sigelts with
  -    | [ { sigel = Sig_let (lbs, names) } ] ->
  -      names |>
  +    | [{ 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
       | _ -> []
  
positive.code:                    sigattrs = [];
                     sigopts = None; }
              else let t = desugar_typ env' t in
                   mk_typ_abbrev qlid [] typars kopt t [qlid] quals rng in
  
          let env = push_sigelt env se in
          let env = push_doc env qlid d.doc in
  
negative.code:           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 =
  