enum-text-0.5.1.0: README.md
# enum-text
A simple toolkit for rendering enumerated types into `Text` `Builder` (used by
the [`fmt`](http://hackage.haskell.org/package/fmt) package) and parsing them
back again into Text with the provided `TextParsable` type class.
To get the `Buildable` and `TextParsable` instances for an enumerated data type
the following pattern can be used without any language extensions:
```
import Fmt
import Text.Enum.Text
data Foo = FOO_bar | FOO_bar_baz
deriving (Bounded,Enum,Eq,Ord,Show)
instance EnumText Foo
instance Buildable Foo where build = buildEnumText
instance TextParsable Foo where parseText = parseEnumText
```
With the `DeriveAnyClass` language extension you can list `EnumText` in the
`deriving` clause, and with `DerivingVia` (available from GHC 8.6.1) you can
derive `via` `UsingEnumText` as follows:
```
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DerivingVia #-}
import Fmt
import Text.Enum.Text
data Foo = FOO_bar | FOO_bar_baz
deriving (Bounded,Enum,EnumText,Eq,Ord,Show)
deriving (Buildable,TextParsable) via UsingEnumText Foo
```
This will use the default configuration for generating the text of each
enumeration from the derived `show` text, namely:
* removing the prefix upto and including the first underscore (`_`);
* converting each subsequent underscore (`_`) into a dash (`-`).
See the Haddocks for details on how to override this default configuration for
any given enumeration type.
Functions for rendering text, generating and parsing UTF-8 encoded ByteStrings
(suitable for cassava) and `Hashable` functions are also provided `EnumText`.