{-# OPTIONS_GHC -fwarn-incomplete-patterns  #-}
{-# OPTIONS_GHC -fwarn-missing-methods      #-}
{-# LANGUAGE DeriveDataTypeable             #-}
{-# LANGUAGE DeriveFunctor                  #-}
{-# LANGUAGE GeneralizedNewtypeDeriving     #-}
{-# LANGUAGE PatternGuards                  #-}
{-# LANGUAGE TemplateHaskell                #-}

module Facts.Geography.Countries.Internal.Splices where

import Data.Data
import Data.Numerals.Decimal
import Data.Typeable

import Facts.Geography.Countries.Internal.Data
import Facts.Utility.Templates

import Prelude hiding (GT, LT)

import Test.QuickCheck
import Test.QuickCheck.Gen


$( list_to_bijection "_country_code_by_country" "_country_by_country_code" countries_and_iso_country_codes)

$( list_to_injection "_country_name_by_country" countries_and_united_nations_names )

$( list_to_injection_via_pushout "_isoAlpha2_for_country"   isoAlpha2  countries_and_iso_country_codes )
$( list_to_injection_via_pushout "_isoAlpha3_for_country"   isoAlpha3  countries_and_iso_country_codes )
$( list_to_injection_via_pushout "_isoNumeric_for_country"  isoNumeric countries_and_iso_country_codes )

$( list_to_injection_via_pullback "_country_for_isoAlpha2"  isoAlpha2  countries_and_iso_country_codes )
$( list_to_injection_via_pullback "_country_for_isoAlpha3"  isoAlpha3  countries_and_iso_country_codes )
$( list_to_injection_via_pullback "_country_for_isoNumeric" isoNumeric countries_and_iso_country_codes )



$( list_to_injection_via_pushout "_shortEnglishCountryName"  english_short_name  countries_and_united_nations_names )
$( list_to_injection_via_pushout "_formalEnglishCountryName" english_formal_name countries_and_united_nations_names )