One reason why I am favoring the first or second option is that we already have other types whose repr() is exactly what you enter (or at least a normalized version).