repos / handle-examples.hs.git


handle-examples.hs.git / simple-handle / domain
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