Remove AsRef/AsMut impls on [T; N]
#133
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #131, #132
Notably these impls even existing can break code which would otherwise compile when
hybrid-arrayis included as a dependency, due to some complex interactions between type inference and the sized-to-unsized coercion, something I previously knew little about prior to #131:https://rustc-dev-guide.rust-lang.org/traits/unsize.html
Notably the existence of overlapping
AsRefimpls can break inference in cases where code is depending on the sized-to-unsized coercion, since the compiler can infer the desired type is[T]and coerce the other arguments from[T; N]into[T]to match.When this is no longer possible, it can fail in some pretty counterintuitive ways. See #131 for examples.
This is all unfortunate because it's removing functionality which made it possible to expose
[T; N]in public APIs so the caller didn't have to worry aboutArrayat all. Perhaps we can lean on theFromimpls for doing such conversions instead.