Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Modifiers for types, i.e. newtype wrappers where the values satisfy some constraint (non-empty, positive etc.). Suggestions on useful types are appreciated.
To apply the modifiers types you can use the record label. For instance:
data C a = C [a] [a] derivingTypeable
instanceEnumerable
a =>Enumerable
(C a) whereenumerate
=c2
$ \xs ys -> C (nonEmpty
xs) (nonEmpty
ys)
Alternatively you can put everything in pattern postition:
instanceEnumerable
a =>Enumerable
(C a) whereenumerate
=unary
$funcurry
$ \(Free
(NonEmpty
xs,NonEmpty
ys)) -> C xs ys)
The first approach has the advantage of being usable with a
point free style: \xs -> C (
.nonEmpty
xs) . nonEmpty
Documentation
module Data.Modifiers