module Data.Generic.Diff.TH.Types where
import Control.Lens
import Data.Data
import Language.Haskell.TH
data FamConType = Concrete
| Abstract
deriving(Data, Typeable, Show, Eq)
data FamCon = FamCon {
_famConHardness :: FamConType,
_famConName :: Name ,
_famConOriginalName :: Name ,
_famConTypes :: [Type]
}
deriving(Data, Typeable, Show, Eq)
makeLenses ''FamCon
data FamType = FamType {
_famTypeType :: Type ,
_famTypeConstructors :: [FamCon]
}
deriving(Data, Typeable, Show, Eq)
makeLenses ''FamType
data Fam = Fam {
_famName :: Name ,
_famTypes :: [FamType]
}
deriving(Data, Typeable, Show, Eq)
makeLenses ''Fam