{-# LANGUAGE CPP             #-}
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators   #-}
{-# LANGUAGE ViewPatterns    #-}

module GHC.Definitions.TH.Example where

import GHC.Builtin.Types  (eqTyCon)
import GHC.Definitions.TH (makeDefinitions, makePattern)
import GHC.TypeNats       (type (-))

makeDefinitions
  [ 'id
  , ''Maybe
  , 'Nothing
  , '(+)
  , ''(-)
  , ''Ord
  ]

makePattern "MaybeTy"     'maybeTyCon
makePattern "IdExpr"      'idVar
makePattern "NothingExpr" 'nothingDataCon
makePattern "NothingTy"   'promotedNothingTyCon
makePattern "EqTy"        'eqTyCon
makePattern "MinusTy"     'minusTyCon
makePattern "OrdTy"       'ordClass