{-#LANGUAGE DeriveDataTypeable          #-}
{-#LANGUAGE GeneralizedNewtypeDeriving  #-}
module Facts.Geography.Countries.UnitedStates.Address where
                    
import Data.Data
import Data.Typeable                        

import Facts.Geography.Countries.UnitedStates
import Facts.Geography.Countries.UnitedStates.ZipCode


data Recipient = Recipient { recipient_name :: String
                           , recipient_firm :: Maybe String
                           } deriving (Data, Eq, Ord, Show, Typeable)

data Address = Address { recipient        :: Recipient
                       , street_address   :: String 
                       , street_address2  :: Maybe String
                       , city             :: String
                       , state            :: Either StateCode OtherUSEntity
                       , zip_code         :: ZipCode
                       } deriving (Data, Eq, Show, Ord, Typeable)