newtype-zoo: Newtype Wrapper Zoo

[ bsd3, data, library ] [ Propose Tags ]

[Skip to Readme]
Versions [faq] 1.0.0.0, 1.0.0.1, 1.1.0.0, 1.2.0.0
Change log CHANGELOG.md
Dependencies base (>=4.12.0.0 && <4.13), comonad, data-default, deepseq, pointed, profunctors, QuickCheck, random [details]
License BSD-3-Clause
Author Sven Heyll
Maintainer sven.heyll@gmail.com
Category Data
Home page https://github.com/sheyll/newtype-zoo
Uploaded by SvenHeyll at Fri Sep 27 18:32:32 UTC 2019
Distributions NixOS:1.2.0.0
Downloads 255 total (42 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs available [build log]
Last success reported on 2019-09-27 [all 1 reports]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for newtype-zoo-1.2.0.0

[back to package description]

General Purpose Newtype Wrappers

A zoo of newtype wrappers.

In everyday Haskell programming newtype wrappers occur again and again, to convey some extra meaning for the maintainer of the code, and to prevent mixing up parameters to functions with the same type.

For example:

applyConfiguration :: MyConfig -> MyConfig -> IO MyConfig

What the user actually wanted to express was:

applyConfiguration :: Wanted MyConfig -> Current MyConfig -> IO (Active MyConfig)

The newtype wrappers in this library are all exported by the NewtypeZoo module, or can be imported individually.

This simple library contains a variety of simple newtype wrappers:

They live in the sub directory NewtypeZoo, e.g. NewtypeZoo.Active.

This library offers shorter code for the special cases. The tagged library is more general, but requires more code.

The reason why I prefer this library in some cases, is shorter type signatures.

One can even combine tagged with newtype-zoo (I think I will add this to the README):


import Data.Tagged
import NewtypeZoo.Current
import NewtypeZoo.Wanted

applyConfigurationTagged
  :: Tagged Wanted MyConfig
  -> Tagged Current MyConfig
  -> IO (Tagged Current MyConfig)