Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/raehik/type-level-show

Utilities for writing Show-like type families
https://github.com/raehik/type-level-show

Last synced: about 2 months ago
JSON representation

Utilities for writing Show-like type families

Awesome Lists containing this project

README

        

# type-level-show
Utilities for writing `Show`-like type families i.e. instead of `showsPrec
:: Int -> a -> ShowS`, we have `ShowsPrec :: Natural -> k -> Symbol`.

Requires at least GHC 9.6 for the builtin `SChar` etc. singletons.

## Why?
[refined-hackage]: https://hackage.haskell.org/package/refined
[rerefined-hackage]: https://hackage.haskell.org/package/rerefined

[refined][refined-hackage] fills out error messages using `TypeRep`s. My rewrite
[rerefined][rerefined-hackage] allows you to use `Typeable` to fill out a
predicate name, or you can do it yourself. But `TypeRep` is a pain to use, and
it seems strange to do runtime work on type representations. Why can't we just
do it on the type level?

We _could_, but the problem is nice formatting. `Show` instances handle
precedence, and the base library provides a bunch of handy utilities such as
`showParen :: Bool -> ShowS -> ShowS`. Worse, I couldn't find a `ShowNat ::
Natural -> Symbol` type family on Hoogle, which is a very simple type family
that should certainly be lying around.

This library intends to provide such utilities, so that rerefined can avoid
`Typeable` altogether.

Unsure if I'll provide a `ShowType`. Lower priority than the plain utilities.

## License
Provided under the MIT license. See `LICENSE` for license text.