packages feed

testing-feat-1.1.1.1: Test/Feat/Modifiers.hs

-- | 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