module Grisette.Internal.TH.ADT
( makeGrisetteADTWithClasses,
makeGrisetteBasicADT,
makeGrisetteBasicADT1,
makeGrisetteBasicADT2,
makeGrisetteBasicADTWith,
makeGrisetteBasicADT1With,
makeGrisetteBasicADT2With,
makeGrisetteADT,
makeGrisetteADT1,
makeGrisetteADT2,
makeGrisetteADTWith,
makeGrisetteADT1With,
makeGrisetteADT2With,
)
where
import Grisette.Internal.TH.Ctor.SmartConstructor (makeSmartCtor)
import Grisette.Internal.TH.Derivation.Common (DeriveConfig)
import Grisette.Internal.TH.Derivation.Derive
( allClasses0,
allClasses01,
allClasses012,
basicClasses0,
basicClasses01,
basicClasses012,
deriveWith,
)
import Language.Haskell.TH (Dec, Name, Q)
makeGrisetteADTWithClasses :: DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses :: DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
config Name
name [Name]
classes = do
[Dec]
instances <- DeriveConfig -> [Name] -> [Name] -> Q [Dec]
deriveWith DeriveConfig
config [Name
name] [Name]
classes
[Dec]
ctors <- Name -> Q [Dec]
makeSmartCtor Name
name
[Dec] -> Q [Dec]
forall a. a -> Q a
forall (m :: * -> *) a. Monad m => a -> m a
return ([Dec]
instances [Dec] -> [Dec] -> [Dec]
forall a. [a] -> [a] -> [a]
++ [Dec]
ctors)
makeGrisetteBasicADT :: Name -> Q [Dec]
makeGrisetteBasicADT :: Name -> Q [Dec]
makeGrisetteBasicADT = DeriveConfig -> Name -> Q [Dec]
makeGrisetteBasicADTWith DeriveConfig
forall a. Monoid a => a
mempty
makeGrisetteBasicADTWith :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteBasicADTWith :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteBasicADTWith DeriveConfig
config Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
config Name
name [Name]
basicClasses0
makeGrisetteBasicADT1 :: Name -> Q [Dec]
makeGrisetteBasicADT1 :: Name -> Q [Dec]
makeGrisetteBasicADT1 Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
forall a. Monoid a => a
mempty Name
name [Name]
basicClasses01
makeGrisetteBasicADT1With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteBasicADT1With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteBasicADT1With DeriveConfig
config Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
config Name
name [Name]
basicClasses01
makeGrisetteBasicADT2 :: Name -> Q [Dec]
makeGrisetteBasicADT2 :: Name -> Q [Dec]
makeGrisetteBasicADT2 Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
forall a. Monoid a => a
mempty Name
name [Name]
basicClasses012
makeGrisetteBasicADT2With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteBasicADT2With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteBasicADT2With DeriveConfig
config Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
config Name
name [Name]
basicClasses012
makeGrisetteADT :: Name -> Q [Dec]
makeGrisetteADT :: Name -> Q [Dec]
makeGrisetteADT = DeriveConfig -> Name -> Q [Dec]
makeGrisetteADTWith DeriveConfig
forall a. Monoid a => a
mempty
makeGrisetteADTWith :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteADTWith :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteADTWith DeriveConfig
config Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
config Name
name [Name]
allClasses0
makeGrisetteADT1 :: Name -> Q [Dec]
makeGrisetteADT1 :: Name -> Q [Dec]
makeGrisetteADT1 = DeriveConfig -> Name -> Q [Dec]
makeGrisetteADT1With DeriveConfig
forall a. Monoid a => a
mempty
makeGrisetteADT1With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteADT1With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteADT1With DeriveConfig
config Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
config Name
name [Name]
allClasses01
makeGrisetteADT2 :: Name -> Q [Dec]
makeGrisetteADT2 :: Name -> Q [Dec]
makeGrisetteADT2 = DeriveConfig -> Name -> Q [Dec]
makeGrisetteADT2With DeriveConfig
forall a. Monoid a => a
mempty
makeGrisetteADT2With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteADT2With :: DeriveConfig -> Name -> Q [Dec]
makeGrisetteADT2With DeriveConfig
config Name
name =
DeriveConfig -> Name -> [Name] -> Q [Dec]
makeGrisetteADTWithClasses DeriveConfig
config Name
name [Name]
allClasses012