What do you want the type of `omap` to be for `UserName`? There are two reasonable definitions:
omap :: (Text -> Text) -> (UserName -> UserName)
omap :: (Char -> Char) -> (UserName -> UserName)
The first one is saying that a UserName is a container of a single Text value. The second is that a UserName is a container of a sequence of Char values. Once you figure out what the answer to this question is, you'll need to use an associated type called Element to specify what you intend, e.g.:
type Element UserName = Char