multirec-0.2: examples/ASTTHUse.hs
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE TemplateHaskell #-}
module ASTTHUse where
import Generics.MultiRec.Base
import Generics.MultiRec.TH
import AST
-- * Instantiating the library for AST using TH
-- ** Index type
data AST :: * -> * where
Expr :: AST Expr
Decl :: AST Decl
Var :: AST Var
-- ** Constructors
$(deriveConstructors [''Expr, ''Decl, ''Var])
-- ** Functor encoding and 'Ix' instances
$(deriveSystem ''AST [''Expr, ''Decl, ''Var] "PFAST")
type instance PF AST = PFAST