It's not an implementation detail, because it has an impact on the reasoning that's possible for the type. If it gets in the way of sane user-defined optimizations via rewrite rules (it does) then it's part of the public API.