module Data.Comp.Derive
(
derive,
module Data.Comp.Derive.Show,
module Data.Comp.Derive.Equality,
module Data.Comp.Derive.Ordering,
Functor,
instanceFunctor,
module Data.Comp.Derive.Foldable,
module Data.Comp.Derive.Traversable,
module Data.Comp.Derive.ExpFunctor,
module Data.Comp.Derive.Arbitrary,
NFData(..),
instanceNFData,
module Data.Comp.Derive.DeepSeq,
module Data.Comp.Derive.SmartConstructors,
module Data.Comp.Derive.Multi.Show,
module Data.Comp.Derive.Multi.Equality,
module Data.Comp.Derive.Multi.Functor,
module Data.Comp.Derive.Multi.Foldable,
module Data.Comp.Derive.Multi.Traversable,
module Data.Comp.Derive.Multi.ExpFunctor,
module Data.Comp.Derive.Multi.SmartConstructors
) where
import Control.DeepSeq (NFData(..))
import Data.Comp.Derive.Foldable
import Data.Comp.Derive.Traversable
import Data.Comp.Derive.ExpFunctor
import Data.Comp.Derive.DeepSeq
import Data.Comp.Derive.Show
import Data.Comp.Derive.Ordering
import Data.Comp.Derive.Equality
import Data.Comp.Derive.Arbitrary
import Data.Comp.Derive.SmartConstructors
import Data.Comp.Derive.Multi.Equality
import Data.Comp.Derive.Multi.Show
import Data.Comp.Derive.Multi.Functor
import Data.Comp.Derive.Multi.Foldable
import Data.Comp.Derive.Multi.Traversable
import Data.Comp.Derive.Multi.ExpFunctor
import Data.Comp.Derive.Multi.SmartConstructors
import Language.Haskell.TH
import Control.Monad
import qualified Data.DeriveTH as D
import Data.Derive.All
derive :: [Name -> Q [Dec]] -> [Name] -> Q [Dec]
derive ders names = liftM concat $ sequence [der name | der <- ders, name <- names]
instanceFunctor :: Name -> Q [Dec]
instanceFunctor = D.derive makeFunctor
instanceNFData :: Name -> Q [Dec]
instanceNFData = D.derive makeNFData