From b96ff0bfb165b3d651796ba8d3be088121ddcfe5 Mon Sep 17 00:00:00 2001 From: Szymon Szczubkowski Date: Sun, 26 May 2024 18:51:13 +0200 Subject: [PATCH] add temperature extraction --- app/DataTypes.hs | 15 +++++++++++++++ app/Main.hs | 10 +++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/DataTypes.hs b/app/DataTypes.hs index 0798c49..3b80be3 100644 --- a/app/DataTypes.hs +++ b/app/DataTypes.hs @@ -64,3 +64,18 @@ weatherDecode jsonBody = case decode jsonBody :: Maybe WeatherResponse of Just decoded -> return decoded Nothing -> error "Invalid JSON" + +getTemperature :: WeatherResponse -> Float +getTemperature (WeatherResponse _ Nothing Nothing) = error "No data provided!" +getTemperature (WeatherResponse _ (Just curr) Nothing) = getTemperatureFromCurrent curr +getTemperature (WeatherResponse _ Nothing (Just fore)) = getTemperatureFromForecastDay $ getForecastDayFromForecast fore +getTemperature (WeatherResponse _ (Just _) (Just fore)) = getTemperatureFromForecastDay $ getForecastDayFromForecast fore + +getForecastDayFromForecast :: Forecast -> ForecastDay +getForecastDayFromForecast (Forecast forecasts) = head forecasts + +getTemperatureFromCurrent :: Current -> Float +getTemperatureFromCurrent (Current temp) = temp + +getTemperatureFromForecastDay :: ForecastDay -> Float +getTemperatureFromForecastDay (ForecastDay (Day temp)) = temp \ No newline at end of file diff --git a/app/Main.hs b/app/Main.hs index 71f1ecc..52987b6 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -7,7 +7,6 @@ import Data.Time as T import Plot import qualified DataTypes as DT - data WhichDay = Yesterday | Today | Tomorrow deriving (Show, Eq) @@ -33,25 +32,22 @@ main = do let yesterdayDate = formatDate $ addDays (-1) currentDate let yesterdayRequest = apiRequestBuilder apiKey Yesterday city yesterdayDate yesterdayResponse <- httpLBS yesterdayRequest - print $ getResponseStatusCode yesterdayResponse yesterdayDecoded <- DT.weatherDecode $ getResponseBody yesterdayResponse - print yesterdayDecoded + print ("Yesterday's temperature: ", DT.getTemperature yesterdayDecoded) --request for today's weather let todayDate = formatDate currentDate let todayRequest = apiRequestBuilder apiKey Today city todayDate todayResponse <- httpLBS todayRequest - print $ getResponseStatusCode todayResponse todayDecoded <- DT.weatherDecode $ getResponseBody todayResponse - print todayDecoded + print ("Today's temperature: ", DT.getTemperature todayDecoded) --request for tomorrow's weather let tomorrowDate = formatDate $ addDays 1 currentDate let tomorrowRequest = apiRequestBuilder apiKey Tomorrow city tomorrowDate tomorrowResponse <- httpLBS tomorrowRequest - print $ getResponseStatusCode tomorrowResponse tomorrowDecoded <- DT.weatherDecode $ getResponseBody tomorrowResponse - print tomorrowDecoded + print ("Tomorrow's temperature: ", DT.getTemperature tomorrowDecoded) --apiKey is stored in an env variable, not something that should be pushed onto git