pub fn walk_type_mut<Id, T, F>(typ: &mut T, f: &mut F)where
    F: WalkerMut<T> + ?Sized,
    T: TypePtr<Id = Id> + DerefMut<Target = Type<Id, T>>,
    T::Types: DerefMut<Target = [T]>,
    T::Fields: DerefMut<Target = [Field<T::SpannedId, T>]>,
    T::TypeFields: DerefMut<Target = [Field<T::SpannedId, Alias<Id, T>>]>,