Originally they were newtype structs, but bugs with generic newtypes caused me to make them real structs. Also, they didn't originally implement `.to_str()` or `.with_str()`. I think that with the additional complexity, it's probably simpler to just use a boolean flag to indicate if it's a filename.