Evgenii Akentev
·
2021-01-07
WeatherReporter.hs
1module WeatherReporter where
2
3import qualified WeatherProvider
4
5type WeatherReport = String
6
7-- | We hide dependencies in the handle
8data Handle = Handle { weatherProvider :: WeatherProvider.Handle }
9
10-- | Constructor for Handle
11new :: WeatherProvider.Handle -> Handle
12new = Handle
13
14-- | Domain logic. Usually some pure code that might use mtl, free monads, etc.
15createWeatherReport :: WeatherProvider.WeatherData -> WeatherReport
16createWeatherReport (WeatherProvider.WeatherData temp) =
17 "The current temperature in London is " ++ (show temp)
18
19-- | Domain logic that uses external dependency to get data and process it.
20getCurrentWeatherReportInLondon :: Handle -> IO WeatherReport
21getCurrentWeatherReportInLondon (Handle wph) = do
22 weatherData <- WeatherProvider.getWeatherData wph "London" "now"
23 return $ createWeatherReport weatherData