-- | Provides data pertaining to Phone number patterns of different -- countries & territories module PhoneNumberMetadata where import System.IO.Unsafe (unsafePerformIO) import Paths_phone_metadata data PhoneNumberMetadata = PhoneNumberMetadata { territories :: [Territory] } deriving (Show, Read) data PhoneNumberType = FixedLine | Mobile | Pager | TollFree | PremiumRate | SharedCost | PersonalNumber | VOIP | UAN | Voicemail deriving (Read, Show) type NumberPattern = String type PhoneNumber = String type SourceUrl = String -- | Describes phone-number patterns and rules for one country or territory. data Territory = Territory { abbreviation :: String, countryCode :: String, mainCountryForCode :: Maybe Bool, leadingDigits :: Maybe String, preferredInternationalPrefix :: Maybe String, internationalPrefix :: Maybe String, nationalPrefix :: Maybe String, nationalPrefixForParsing :: Maybe String, nationalPrefixTransformRule :: Maybe String, preferredExtensionPrefix :: Maybe String, nationalPrefixFormattingRule :: Maybe String, nationalPrefixOptionalWhenFormatting :: Maybe Bool, leadingZeroPossible :: Maybe Bool, carrierCodeFormattingRule :: Maybe String, mobileNumberPortableRegion :: Maybe Bool, references :: [SourceUrl], availableFormats :: Maybe [NumberFormat], generalDescription :: Maybe PhoneNumberPatterns, noInternationalDialling :: Maybe PhoneNumberPatterns, areaCodeOptional :: Maybe PhoneNumberPatterns, fixedLine :: Maybe PhoneNumberPatterns, mobile :: Maybe PhoneNumberPatterns, pager :: Maybe PhoneNumberPatterns, tollFree :: Maybe PhoneNumberPatterns, premiumRate :: Maybe PhoneNumberPatterns, sharedCost :: Maybe PhoneNumberPatterns, personalNumber :: Maybe PhoneNumberPatterns, voip :: Maybe PhoneNumberPatterns, uan :: Maybe PhoneNumberPatterns, voicemail :: Maybe PhoneNumberPatterns } deriving (Show, Read) data NumberFormat = NumberFormat { nfNationalPrefixFormattingRule :: Maybe String, nfNationalPrefixOptionalWhenFormatting :: Maybe Bool, nfCarrierCodeFormattingRule :: Maybe String, nfPattern :: String, nfLeadingZeroPossible :: Maybe Bool, nfLeadingDigits :: Maybe [String], nfFormat :: String, nfInternationalFormat :: Maybe [String] } deriving (Show, Read) data PhoneNumberPatterns = PhoneNumberPatterns { phoneNumberType :: String , nationalNumberPattern :: Maybe NumberPattern , possibleNumberPattern :: Maybe NumberPattern , exampleNumber :: Maybe PhoneNumber } deriving (Read, Show) phoneNumberMetadata :: PhoneNumberMetadata phoneNumberMetadata = read $ unsafePerformIO $ readFile =<< getDataFileName "phoneNumberMetadata.hs" :: PhoneNumberMetadata -- read $ unsafePerformIO $ readFile "config/phoneNumberMetadata.hs" :: PhoneNumberMetadata