quiet-0.2: README.md
# quiet
Generic deriving of `Read` / `Show` with no record labels.
[![Hackage][hackage-shield]][hackage] [![Travis][travis-shield]][travis]
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:
```hs
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.
```hs
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.
```hs
instance Read UserId where readPrec = qreadPrec
instance Show UserId where showsPrec = qshowsPrec
```
[hackage]: http://hackage.haskell.org/package/quiet
[hackage-shield]: https://img.shields.io/hackage/v/quiet.svg?style=flat
[travis]: https://travis-ci.org/jacobstanley/quiet
[travis-shield]: https://travis-ci.org/jacobstanley/quiet.svg?branch=master