From bc90443102b476bc28f0d8bd01fccd93205c6685 Mon Sep 17 00:00:00 2001 From: Evgenii Akentev Date: Sat, 9 Jan 2021 20:40:35 +0500 Subject: [PATCH] [vinyl-handle]: implement providers properly --- vinyl-handle/Main.hs | 9 +++++++-- vinyl-handle/impl/SuperTemperatureProvider.hs | 12 ++++++++++++ vinyl-handle/impl/SuperWeatherProvider.hs | 18 +++++------------- vinyl-handle/impl/SuperWindProvider.hs | 12 ++++++++++++ vinyl-handle/vinyl-handle.cabal | 2 ++ 5 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 vinyl-handle/impl/SuperTemperatureProvider.hs create mode 100644 vinyl-handle/impl/SuperWindProvider.hs diff --git a/vinyl-handle/Main.hs b/vinyl-handle/Main.hs index 197df48..5301f04 100644 --- a/vinyl-handle/Main.hs +++ b/vinyl-handle/Main.hs @@ -1,6 +1,8 @@ module Main where import qualified SuperWeatherProvider +import qualified SuperWindProvider +import qualified SuperTemperatureProvider import qualified WeatherProvider import qualified WeatherReporter @@ -8,7 +10,10 @@ import qualified WeatherReporter -- our concrete implementation of `WeatherProvider`. main :: IO () main = do - let wph = SuperWeatherProvider.new - let wrh = WeatherReporter.new wph + let + wp = SuperWindProvider.new + tp = SuperTemperatureProvider.new + wph = SuperWeatherProvider.new wp tp + wrh = WeatherReporter.new wph weatherReportInLondon <- WeatherReporter.getCurrentWeatherReportInLondon wrh putStrLn weatherReportInLondon diff --git a/vinyl-handle/impl/SuperTemperatureProvider.hs b/vinyl-handle/impl/SuperTemperatureProvider.hs new file mode 100644 index 0000000..656c01e --- /dev/null +++ b/vinyl-handle/impl/SuperTemperatureProvider.hs @@ -0,0 +1,12 @@ +module SuperTemperatureProvider where + +import Data.Vinyl +import TemperatureProvider +import QueryTypes + +new :: Handle +new = Field getSuperTemperatureData + :& RNil + +getSuperTemperatureData :: Location -> Day -> IO Temperature +getSuperTemperatureData _ _ = return 30 diff --git a/vinyl-handle/impl/SuperWeatherProvider.hs b/vinyl-handle/impl/SuperWeatherProvider.hs index 885976d..4333fa6 100644 --- a/vinyl-handle/impl/SuperWeatherProvider.hs +++ b/vinyl-handle/impl/SuperWeatherProvider.hs @@ -2,22 +2,14 @@ module SuperWeatherProvider where import Data.Vinyl import WeatherProvider -import TemperatureProvider (Temperature) -import WindProvider (WindSpeed) +import qualified TemperatureProvider +import qualified WindProvider import QueryTypes -new :: Handle -new = Field getSuperWeatherData - :& Field getSuperWindData - :& Field getSuperTemperatureData - :& RNil +new :: WindProvider.Handle -> TemperatureProvider.Handle -> Handle +new wp tp = Field getSuperWeatherData + :& RNil <+> wp <+> tp -- | This is some concrete implementation `WeatherProvider` interface getSuperWeatherData :: Location -> Day -> IO WeatherData getSuperWeatherData _ _ = return $ WeatherData 30 10 - -getSuperTemperatureData :: Location -> Day -> IO Temperature -getSuperTemperatureData _ _ = return 30 - -getSuperWindData :: Location -> Day -> IO WindSpeed -getSuperWindData _ _ = return 5 diff --git a/vinyl-handle/impl/SuperWindProvider.hs b/vinyl-handle/impl/SuperWindProvider.hs new file mode 100644 index 0000000..d601d02 --- /dev/null +++ b/vinyl-handle/impl/SuperWindProvider.hs @@ -0,0 +1,12 @@ +module SuperWindProvider where + +import Data.Vinyl +import WindProvider +import QueryTypes + +new :: Handle +new = Field getSuperWindData + :& RNil + +getSuperWindData :: Location -> Day -> IO WindSpeed +getSuperWindData _ _ = return 5 diff --git a/vinyl-handle/vinyl-handle.cabal b/vinyl-handle/vinyl-handle.cabal index c020c20..4d9b821 100644 --- a/vinyl-handle/vinyl-handle.cabal +++ b/vinyl-handle/vinyl-handle.cabal @@ -21,6 +21,8 @@ library domain library impl hs-source-dirs: impl exposed-modules: SuperWeatherProvider + , SuperWindProvider + , SuperTemperatureProvider default-language: Haskell2010 build-depends: base, domain, vinyl -- 2.34.1