It's awkward to write a lambda to unwrap this kind of wrappers. I propose

newtype Down a = Down { getDown :: a }

with the Show/Read instances as if they didn't have named fields.

The same goes for Control.Arrow.ArrowMonad, although I'm not sure about its usefulness...