Should we assume `!= r` means `w` or explicitly case these and throw a `ValueError()`?