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...