-- | 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] deriving 'Typeable' -- instance 'Enumerable' a => 'Enumerable' (C a) where -- 'enumerate' = 'c2' $ -- \\xs ys -> C ('nonEmpty' xs) ('nonEmpty' ys) -- @ -- -- Alternatively you can put everything in pattern postition: -- -- @ -- instance 'Enumerable' a => 'Enumerable' (C a) where -- 'enumerate' = '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' @. module Test.Feat.Modifiers (module Data.Modifiers) where import Data.Modifiers