module Main where
import qualified SuperWeatherProvider
+import qualified SuperWindProvider
+import qualified SuperTemperatureProvider
import qualified WeatherProvider
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
--- /dev/null
+module SuperTemperatureProvider where
+
+import Data.Vinyl
+import TemperatureProvider
+import QueryTypes
+
+new :: Handle
+new = Field getSuperTemperatureData
+ :& RNil
+
+getSuperTemperatureData :: Location -> Day -> IO Temperature
+getSuperTemperatureData _ _ = return 30
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
--- /dev/null
+module SuperWindProvider where
+
+import Data.Vinyl
+import WindProvider
+import QueryTypes
+
+new :: Handle
+new = Field getSuperWindData
+ :& RNil
+
+getSuperWindData :: Location -> Day -> IO WindSpeed
+getSuperWindData _ _ = return 5
library impl
hs-source-dirs: impl
exposed-modules: SuperWeatherProvider
+ , SuperWindProvider
+ , SuperTemperatureProvider
default-language: Haskell2010
build-depends: base, domain, vinyl