-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Simple reverse geocoding using OpenStreeMap
--
-- Simple reverse geocoding using OpenStreeMap
@package reverse-geocoding
@version 0.2.4.0
module Data.Geolocation.Reverse.Types
-- | Input types
--
-- Latitude : newtype over double
newtype Latitude
Latitude :: (Maybe Double) -> Latitude
-- | Longitude : newtype over double
newtype Longitude
Longitude :: (Maybe Double) -> Longitude
-- | Output types
newtype City
City :: Text -> City
[getCity] :: City -> Text
newtype Suburb
Suburb :: Text -> Suburb
[getSuburb] :: Suburb -> Text
newtype Street
Street :: Text -> Street
[getStreet] :: Street -> Text
newtype Postcode
Postcode :: Text -> Postcode
[getPostcode] :: Postcode -> Text
-- | Parsed Location Info: Country code and city are mandatory, all other
-- info is optional
data ParsedLocationInfo
ParsedLocationInfo :: CountryCode -> City -> Maybe Suburb -> Maybe Street -> Maybe Postcode -> ParsedLocationInfo
[parsedCountry] :: ParsedLocationInfo -> CountryCode
[parsedCity] :: ParsedLocationInfo -> City
[parsedSuburb] :: ParsedLocationInfo -> Maybe Suburb
[parsedStreet] :: ParsedLocationInfo -> Maybe Street
[parsedPostCode] :: ParsedLocationInfo -> Maybe Postcode
instance GHC.Show.Show Data.Geolocation.Reverse.Types.ParsedLocationInfo
instance GHC.Classes.Ord Data.Geolocation.Reverse.Types.ParsedLocationInfo
instance GHC.Classes.Eq Data.Geolocation.Reverse.Types.ParsedLocationInfo
instance Data.Aeson.Types.Class.ToJSON Data.Geolocation.Reverse.Types.Postcode
instance Data.Aeson.Types.Class.FromJSON Data.Geolocation.Reverse.Types.Postcode
instance GHC.Read.Read Data.Geolocation.Reverse.Types.Postcode
instance GHC.Show.Show Data.Geolocation.Reverse.Types.Postcode
instance GHC.Classes.Ord Data.Geolocation.Reverse.Types.Postcode
instance GHC.Classes.Eq Data.Geolocation.Reverse.Types.Postcode
instance Data.Aeson.Types.Class.ToJSON Data.Geolocation.Reverse.Types.Street
instance Data.Aeson.Types.Class.FromJSON Data.Geolocation.Reverse.Types.Street
instance GHC.Read.Read Data.Geolocation.Reverse.Types.Street
instance GHC.Show.Show Data.Geolocation.Reverse.Types.Street
instance GHC.Classes.Ord Data.Geolocation.Reverse.Types.Street
instance GHC.Classes.Eq Data.Geolocation.Reverse.Types.Street
instance Data.Aeson.Types.Class.ToJSON Data.Geolocation.Reverse.Types.Suburb
instance Data.Aeson.Types.Class.FromJSON Data.Geolocation.Reverse.Types.Suburb
instance GHC.Read.Read Data.Geolocation.Reverse.Types.Suburb
instance GHC.Show.Show Data.Geolocation.Reverse.Types.Suburb
instance GHC.Classes.Ord Data.Geolocation.Reverse.Types.Suburb
instance GHC.Classes.Eq Data.Geolocation.Reverse.Types.Suburb
instance Data.Aeson.Types.Class.ToJSON Data.Geolocation.Reverse.Types.City
instance Data.Aeson.Types.Class.FromJSON Data.Geolocation.Reverse.Types.City
instance GHC.Read.Read Data.Geolocation.Reverse.Types.City
instance GHC.Show.Show Data.Geolocation.Reverse.Types.City
instance GHC.Classes.Ord Data.Geolocation.Reverse.Types.City
instance GHC.Classes.Eq Data.Geolocation.Reverse.Types.City
instance Data.Aeson.Types.Class.ToJSON Data.Geolocation.Reverse.Types.Longitude
instance Data.Aeson.Types.Class.FromJSON Data.Geolocation.Reverse.Types.Longitude
instance GHC.Read.Read Data.Geolocation.Reverse.Types.Longitude
instance GHC.Show.Show Data.Geolocation.Reverse.Types.Longitude
instance GHC.Classes.Ord Data.Geolocation.Reverse.Types.Longitude
instance GHC.Classes.Eq Data.Geolocation.Reverse.Types.Longitude
instance Data.Aeson.Types.Class.ToJSON Data.Geolocation.Reverse.Types.Latitude
instance Data.Aeson.Types.Class.FromJSON Data.Geolocation.Reverse.Types.Latitude
instance GHC.Read.Read Data.Geolocation.Reverse.Types.Latitude
instance GHC.Show.Show Data.Geolocation.Reverse.Types.Latitude
instance GHC.Classes.Ord Data.Geolocation.Reverse.Types.Latitude
instance GHC.Classes.Eq Data.Geolocation.Reverse.Types.Latitude
instance Data.Aeson.Types.Class.ToJSON Data.ISO3166_CountryCodes.CountryCode
instance Data.Aeson.Types.Class.FromJSON Data.ISO3166_CountryCodes.CountryCode
-- | Here we define providers for the Reverse Geocoding feature, namely how
-- to format the url, the key under which the results are returned, and
-- how to parse the retrived data.
--
-- Currently only Open Stree Map is provided, feel free to add others.
module Data.Geolocation.Reverse.Providers
type ReverseGeoJsonKey = Text
type ReverseGeoParser = Object -> Parser ParsedLocationInfo
type ReverseGeoProvider = (ReverseGeoJsonKey, ReverseGeoUrl, ReverseGeoParser)
openStreetMap :: ReverseGeoProvider
-- | This very simple module returns a Maybe Location info for a set of
-- coordinates.
--
-- Right now only one provider is given (OpenStreeMap), please feel free
-- to add more.
--
-- We use this for a very coarse geographic categorization, so the
-- following equivalences hold:
--
-- City : city <|> village <|> town <|> hamlet
-- <|> county
--
-- Suburb: suburb <|> hamlet <|> postcode <|> town
--
-- Street: road <|> street
--
-- All contribuitions are welcomed!
module Data.Geolocation.Reverse
-- | Default reverse geo provider
defaultReverseGeoProvider :: ReverseGeoProvider
-- | Given a Latitude and Longitude, return a Location Info.
getLocationInfo :: Latitude -> Longitude -> ReverseGeoProvider -> IO (Maybe ParsedLocationInfo)
-- | Get location info from default provider (right now Open Stree Map)
getLocationInfoDef :: Latitude -> Longitude -> IO (Maybe ParsedLocationInfo)