Fix build and use composite implementation for WeatherProvider
authorEvgenii Akentev <i@ak3n.com>
Fri, 27 Jan 2023 19:54:42 +0000 (22:54 +0300)
committerEvgenii Akentev <i@ak3n.com>
Fri, 27 Jan 2023 19:54:42 +0000 (22:54 +0300)
vinyl-handle/domain/WeatherProvider.hs
vinyl-handle/impl/SuperWeatherProvider.hs
vinyl-handle/vinyl-handle.cabal

index 6dd72458a1fe2c4e3a32a77dd3fb43fdd7384d53..5596d958b0cb5133d64f3c2d9adbcfae0c8398fd 100644 (file)
@@ -21,6 +21,3 @@ type Handle = HandleRec Methods
 
 getWeatherData :: Handle -> Location -> Day -> IO WeatherData
 getWeatherData = getMethod @"getWeatherData"
-
-getWindData :: Handle -> Location -> Day -> IO W.WindSpeed
-getWindData = getMethod @"getWindData"
index 4333fa651162af24b8c1e9ab0e0eb1a49df369b3..099facc17987f42cc211771adf6df05d86cb4b61 100644 (file)
@@ -1,3 +1,5 @@
+{-# LANGUAGE RecordWildCards #-}
+
 module SuperWeatherProvider where
 
 import Data.Vinyl
@@ -7,9 +9,11 @@ import qualified WindProvider
 import QueryTypes
 
 new :: WindProvider.Handle -> TemperatureProvider.Handle -> Handle
-new wp tp = Field getSuperWeatherData
-  :& RNil <+> wp <+> tp
+new wp tp = Field (getSuperWeatherData wp tp) :& RNil <+> wp <+> tp
 
 -- | This is some concrete implementation `WeatherProvider` interface
-getSuperWeatherData :: Location -> Day -> IO WeatherData
-getSuperWeatherData _ _ = return $ WeatherData 30 10
+getSuperWeatherData :: WindProvider.Handle -> TemperatureProvider.Handle -> Location -> Day -> IO WeatherData
+getSuperWeatherData wp tp loc day = do
+  temperature <- TemperatureProvider.getTemperatureData tp loc day
+  wind <- WindProvider.getWindData wp loc day
+  return $ WeatherData{..}
index 4d9b821a4907c43ef9ff73bcc8c426006dcf1459..a35113477b6fba5b7149f21a3b87a1d47ed315ee 100644 (file)
@@ -1,4 +1,4 @@
-cabal-version:       >=2
+cabal-version:       >=2.0
 name:                vinyl-handle
 version:             0.1.0.0
 license-file:        LICENSE
@@ -34,7 +34,7 @@ library test-impl
 
 executable main
   main-is:             Main.hs
-  build-depends:       base >=4.13 && <4.14
+  build-depends:       base >=4.13 && <5
                      , domain
                      , impl
   default-language:    Haskell2010