{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Facts.Geography.Countries.UnitedStates.ZipCode where import Data.Data import Data.Numerals.Decimal import Data.Typeable type Digit = DecimalDigit data ZipCode = ZipCode { zip_code :: (Digit,Digit,Digit,Digit,Digit) , plus4 :: Maybe (Digit,Digit,Digit,Digit) } deriving (Data, Eq, Ord, Typeable) instance Show ZipCode where show ( ZipCode (z1,z2,z3,z4,z5 ) (Just (p1,p2,p3,p4) ) ) = (concatMap show [z1,z2,z3,z4,z5]) ++ " + " ++ (concatMap show [p1,p2,p3,p4]) show ( ZipCode (z1,z2,z3,z4,z5) Nothing) = (concatMap show [z1,z2,z3,z4,z5])