{-# LANGUAGE DeriveDataTypeable #-}

module ModuleWithData where

import Data.Data
import Data.Typeable

data Country = Afghanistan | AlandIslands | Albania | Zimbabwe
               deriving (Data, Eq, Ord, Show, Typeable)

data ISOCountryCode = ISOCountryCode TwoCode ThreeCode NumCode
                      deriving (Data, Eq, Ord, Show, Typeable)

data TwoCode = AF | AX | AL | ZW
               deriving (Data, Eq, Ord, Show, Typeable)

data ThreeCode = AFG | ALA | ALB | ZWE
                 deriving (Data, Eq, Ord, Show, Typeable)

data NumCode = NC Int
               deriving (Data, Eq, Ord, Show, Typeable)

isoNumericCode :: Int -> NumCode
isoNumericCode = NC

countries_and_iso_country_codes :: [ (Country, ISOCountryCode) ]
countries_and_iso_country_codes =
        [ (Afghanistan,  ISOCountryCode AF AFG (isoNumericCode 004))
        , (AlandIslands, ISOCountryCode AX ALA (isoNumericCode 248))
        , (Albania,      ISOCountryCode AL ALB (isoNumericCode 008))
        , (Zimbabwe,     ISOCountryCode ZW ZWE (isoNumericCode 716))
        ]
