@hackage text-display0.0.2.0
A typeclass for user-facing output
Categories
License
MIT
Maintainer
Hécate Moonlight
Links
Versions
Installation
Tested Compilers
Dependencies (3)
- base >=4.12 && <=5
- bytestring ^>=0.10 || ^>=0.11
- text ^>=1.2 Show all…
Dependents (8)
@hackage/chapelure, @hackage/pg-entity, @hackage/snail, @hackage/one-time-password, @hackage/sel, @hackage/symbolize, Show all…
A Typeclass for user-facing output
Description
The text-display library offers a way for developers to print a textual representation of datatypes that does not
have to abide by the rules of the Show typeclass.
If you wish to learn more about how things are done and why, please read the DESIGN.md file.
Examples
There are two methods to implement Display for your type:
The first one is a manual implementation:
data ManualType = MT Int
-- >>> display (MT 32)
-- "MT 32"
instance Display ManualType where
displayPrec prec (MT i) = displayParen (prec > 10) $ "MT " <> displayPrec 11 i
But this can be quite time-consuming, especially if your datatype already has
an existing Show that you wish to reuse. In which case, you can piggy-back
on this instance like this:
{-# LANGUAGE DerivingVia #-}
data AutomaticallyDerived = AD
-- We derive 'Show'
deriving Show
-- We take advantage of the 'Show' instance to derive 'Display' from it
deriving Display
via (ShowInstance AutomaticallyDerived)
But let's say you want to redact an instance of Display? You can do it locally, through
the OpaqueInstance helper. It is most useful to hide tokens or passwords:
data UserToken = UserToken UUID
deriving Display
via (OpaqueInstance "[REDACTED]" UserToken)
display $ UserToken "7a01d2ce-31ff-11ec-8c10-5405db82c3cd"
-- => "[REDACTED]"