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:
Active
Allocated
Broken
Cached
Complete
Completed
Consistent
Current
Disabled
Enabled
Established
Existing
Failed
Inconsistent
Invalid
Marked
Missing
Multiple
Needed
New
Next
Obsolete
Offered
Old
Partial
Pending
Previous
Proposed
Rejected
Remaining
Replied
Required
Requested
Responded
Single
Unchecked
Unwanted
Updated
Valid
Wanted
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)