module ACME.PreCure.Types.TH where
import ACME.PreCure.Types
import Language.Haskell.TH.Lib
( DecsQ
, ExpQ
, TypeQ
, listE
, stringE
)
girlInstance :: TypeQ -> String -> DecsQ
girlInstance typeq humanN =
[d|
instance Girl $(typeq) where
humanName _ = $(stringE humanN)
|]
transformedInstance :: TypeQ -> String -> String -> String -> DecsQ
transformedInstance typeq cureN intro vari =
[d|
instance Transformed $(typeq) where
cureName _ = $(stringE cureN)
introducesHerselfAs _ = $(stringE intro)
variation _ = $(stringE vari)
|]
transformedGroupInstance :: TypeQ -> String -> String -> DecsQ
transformedGroupInstance typeq groupN vari =
[d|
instance TransformedGroup $(typeq) where
groupName _ = $(stringE groupN)
groupVariation _ = $(stringE vari)
|]
transformedInstanceDefault :: TypeQ -> String -> String -> DecsQ
transformedInstanceDefault typeq cureN intro =
[d|
instance Transformed $(typeq) where
cureName _ = $(stringE cureN)
introducesHerselfAs _ = $(stringE intro)
|]
transformedGroupInstanceDefault :: TypeQ -> String -> DecsQ
transformedGroupInstanceDefault typeq groupN =
[d|
instance TransformedGroup $(typeq) where
groupName _ = $(stringE groupN)
|]
transformationInstance :: TypeQ -> TypeQ -> TypeQ -> ExpQ -> [String] -> DecsQ
transformationInstance g' i' p' pvalue' speech =
[d|
instance Transformation $(g') $(i') where
type Style $(g') $(i') = $(p')
transformedStyle _ _ = $(pvalue')
transformationSpeech _ _ = $(listE $ map stringE speech)
|]
purificationInstance :: TypeQ -> TypeQ -> [String] -> DecsQ
purificationInstance p' i' speech =
[d|
instance Purification $(p') $(i') where
purificationSpeech _ _ = $(listE $ map stringE speech)
|]
nonItemPurificationInstance :: TypeQ -> [String] -> DecsQ
nonItemPurificationInstance p' speech =
[d|
instance NonItemPurification $(p') where
nonItemPurificationSpeech _ = $(listE $ map stringE speech)
|]