@hackage quiet0.2
Generic deriving of Read/Show with no record labels.
Categories
License
BSD-3-Clause
Maintainer
jacob@stanley.io
Links
Versions
Installation
Tested Compilers
Dependencies (1)
Dependents (19)
@cardano/ouroboros-consensus-diffusion, @cardano/io-sim, @cardano/cardano-slotting, @cardano/ouroboros-consensus-shelley-test, @cardano/cardano-ledger-core, @cardano/ouroboros-consensus-cardano, Show all…
quiet
Generic deriving of Read
/ Show
with no record labels.
Often one wants to create a newtype
which has a convenient field
accessor like unUserId
below, but that unfortunately makes the Show
instance which is derived overly verbose.
For example:
newtype UserId = UserId { unUserId :: String }
deriving (Read, Show)
ghci> show (UserId "simon")
UserId {unUserId = "simon"}
ghci> read "UserId {unUserId = \"simon\"}" :: UserId
UserId {unUserId = "simon"}
With DerivingVia
Quiet
you can have a Show
instance which doesn't
print the field labels. It will render as if the unUserId
accessor
wasn't present at all.
newtype UserId = UserId { unUserId :: String }
deriving (Generic)
deriving (Read, Show) via (Quiet UserId)
ghci> show (UserId "simon")
UserId "simon"
ghci> read "UserId \"simon\"" :: UserId
UserId "simon"
If you want to derive Read
/ Show
without using DerivingVia
then
you can use qreadPrec
and qshowsPrec
directly.
instance Read UserId where readPrec = qreadPrec
instance Show UserId where showsPrec = qshowsPrec