derive-0.1.1: Data/Derive/Is.hs
{-# OPTIONS_GHC -fth -cpp #-}
-- | A pseudo derivation. For each constructor of the data type, @Is@
-- generates @is@/CtorName/ which returns 'True' if given an object
-- build using the appropriate constructor, and 'False' otherwise.
module Data.Derive.Is(makeIs) where
import Language.Haskell.TH.All
#ifdef GUESS
import Data.DeriveGuess
example = (,) "Is" [d|
isCtorZero (CtorZero{}) = True; isCtorZero _ = False
isCtorOne (CtorOne {}) = True; isCtorOne _ = False
isCtorTwo (CtorTwo {}) = True; isCtorTwo _ = False
isCtorTwo' (CtorTwo'{}) = True; isCtorTwo' _ = False
|]
#endif
makeIs :: Derivation
makeIs = derivation is' "Is"
is' dat = ((map (\(ctorInd,ctor) -> (FunD (mkName ("is" ++ ctorName ctor)) [(
Clause [((flip RecP []) (mkName ("" ++ ctorName ctor)))] (NormalB (ConE (
mkName "True"))) []),(Clause [WildP] (NormalB (ConE (mkName "False"))) [])]
)) (id (zip [0..] (dataCtors dat))))++[])