aboutsummaryrefslogtreecommitdiff
path: root/lib/Web/OpenWeatherMap/Client.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Web/OpenWeatherMap/Client.hs')
-rw-r--r--lib/Web/OpenWeatherMap/Client.hs45
1 files changed, 25 insertions, 20 deletions
diff --git a/lib/Web/OpenWeatherMap/Client.hs b/lib/Web/OpenWeatherMap/Client.hs
index 758ee8f..c7ad7b6 100644
--- a/lib/Web/OpenWeatherMap/Client.hs
+++ b/lib/Web/OpenWeatherMap/Client.hs
@@ -1,36 +1,42 @@
{-|
High-level client functions perfoming requests to OpenWeatherMap API.
-}
-module Web.OpenWeatherMap.Client (
- Location(..),
- getWeather
-) where
+module Web.OpenWeatherMap.Client
+ ( Location(..)
+ , getWeather
+ ) where
+
+import Network.HTTP.Client (defaultManagerSettings, newManager)
+import Servant.Client
+ ( BaseUrl(BaseUrl)
+ , ClientEnv
+ , ClientError
+ , ClientM
+ , Scheme(Http)
+ , mkClientEnv
+ , runClientM
+ )
-import Network.HTTP.Client (newManager, defaultManagerSettings)
-import Servant.Client (BaseUrl(BaseUrl), ClientEnv, mkClientEnv, ClientM, Scheme(Http), ClientError, runClientM)
-
-import Web.OpenWeatherMap.Types.CurrentWeather (CurrentWeather)
import qualified Web.OpenWeatherMap.API as API
-
+import Web.OpenWeatherMap.Types.CurrentWeather (CurrentWeather)
-- | Various way to specify location.
data Location
- = Name String -- ^ City name.
- | Coord Double Double -- ^ Geographic coordinates: latitude and longitude.
-
+ = Name String -- ^ City name.
+ | Coord Double
+ Double -- ^ Geographic coordinates: latitude and longitude.
-- | Make a request to OpenWeatherMap API
-- and return current weather in given location.
-getWeather
- :: String -- ^ API key.
+getWeather ::
+ String -- ^ API key.
-> Location
-> IO (Either ClientError CurrentWeather)
-getWeather appid loc =
- defaultEnv >>= runClientM (api loc appid)
+getWeather appid loc = defaultEnv >>= runClientM (api loc appid)
-api
- :: Location
- -> String -- ^ API key.
+api ::
+ Location
+ -> String -- ^ API key.
-> ClientM CurrentWeather
api (Name city) = API.weatherByName (Just city) . Just
api (Coord lat lon) = API.weatherByCoord (Just lat) (Just lon) . Just
@@ -44,4 +50,3 @@ defaultEnv = do
-- XXX appid is passed in clear text. Oops.
baseUrl :: BaseUrl
baseUrl = BaseUrl Http "api.openweathermap.org" 80 "/data/2.5"
-