{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}

module ACME.PreCure.Textbook.First.Types where

import           ACME.PreCure.Textbook.First.Words
import           ACME.PreCure.Types.TH


data Nagisa = Nagisa deriving (Eq, Show)
data Honoka = Honoka deriving (Eq, Show)

$(girlInstance [t| Nagisa  |] girlName_Nagisa)
$(girlInstance [t| Honoka  |] girlName_Honoka)

data CureBlack = CureBlack deriving (Eq, Show)
data CureWhite = CureWhite deriving (Eq, Show)

data CardCommune_Mepple = CardCommune_Mepple deriving (Eq, Show)
data CardCommune_Mipple = CardCommune_Mipple deriving (Eq, Show)

data RainbowBrace = RainbowBrace deriving (Eq, Show)

transformedInstanceDefault [t| CureBlack |] cureName_Black introducesHerselfAs_Black
transformedInstanceDefault [t| CureWhite |] cureName_White introducesHerselfAs_White

transformedGroupInstanceDefault
  [t| (CureBlack, CureWhite) |]
  groupName_First

transformationInstance
  [t| (Nagisa, Honoka) |]
  [t| (CardCommune_Mepple, CardCommune_Mipple) |]
  [t| (CureBlack, CureWhite) |]
  [| (CureBlack, CureWhite) |]
  transformationSpeech_Black_White

nonItemPurificationInstance
  [t| (CureBlack, CureWhite) |]
  purificationSpeech_Black_White

purificationInstance
  [t| (CureBlack, CureWhite) |]
  [t| RainbowBrace |]
  purificationSpeech_Black_White_RainbowStorm