- commit
- 3ff5b6d
- parent
- 095b1d1
- author
- Evgenii Akentev
- date
- 2021-01-09 00:29:03 +0400 +04
Fix backpack-handles example with two signatures
2 files changed,
+27,
-21
+20,
-14
1@@ -7,7 +7,7 @@ maintainer: i@ak3n.com
2 build-type: Simple
3 extra-source-files: CHANGELOG.md
4
5-library domain
6+library domain-provider
7 hs-source-dirs: domain
8 signatures: WeatherProvider
9 default-language: Haskell2010
10@@ -17,18 +17,23 @@ library domain-reporter
11 hs-source-dirs: domain
12 signatures: WeatherReporter
13 default-language: Haskell2010
14- build-depends: base, domain
15+ build-depends: base, domain-provider
16
17-library impl
18+library impl-provider
19 hs-source-dirs: impl
20 exposed-modules: SuperWeatherProvider
21- , SuperWeatherReporter
22- reexported-modules: SuperWeatherProvider as WeatherProvider,
23- SuperWeatherReporter as WeatherReporter
24+ reexported-modules: SuperWeatherProvider as WeatherProvider
25 default-language: Haskell2010
26 build-depends: base
27
28-library test-impl
29+library impl-reporter
30+ hs-source-dirs: impl
31+ exposed-modules: SuperWeatherReporter
32+ reexported-modules: SuperWeatherReporter as WeatherReporter
33+ default-language: Haskell2010
34+ build-depends: base, domain-provider
35+
36+library test-provider
37 hs-source-dirs: test-impl
38 exposed-modules: TestWeatherProvider
39 reexported-modules: TestWeatherProvider as WeatherProvider
40@@ -38,8 +43,10 @@ library test-impl
41 executable main
42 main-is: Main.hs
43 build-depends: base >=4.13 && <4.14
44- , impl
45- , domain
46+ , impl-provider
47+ , impl-reporter
48+ , domain-reporter
49+ , domain-provider
50 default-language: Haskell2010
51
52 test-suite spec
53@@ -50,8 +57,7 @@ test-suite spec
54 build-depends: base >= 4.7 && < 5
55 , QuickCheck
56 , hspec
57- , domain
58- , test-impl
59- , impl
60- mixins:
61- impl (WeatherProvider as UnusedWeatherProvider, WeatherReporter)
62+ , domain-reporter
63+ , domain-provider
64+ , test-provider
65+ , impl-reporter
1@@ -1,25 +1,25 @@
2 module SuperWeatherReporter where
3
4-import qualified SuperWeatherProvider
5+import qualified WeatherProvider
6
7 type WeatherReport = String
8
9-type WeatherProviderHandle = SuperWeatherProvider.Handle
10+type WeatherProviderHandle = WeatherProvider.Handle
11
12 -- | We hide dependencies in the handle
13-data Handle = Handle { weatherProvider :: SuperWeatherProvider.Handle }
14+data Handle = Handle { weatherProvider :: WeatherProvider.Handle }
15
16 -- | Constructor for Handle
17-new :: SuperWeatherProvider.Handle -> Handle
18+new :: WeatherProvider.Handle -> Handle
19 new = Handle
20
21 -- | Domain logic. Usually some pure code that might use mtl, free monads, etc.
22-createWeatherReport :: SuperWeatherProvider.WeatherData -> WeatherReport
23-createWeatherReport (SuperWeatherProvider.WeatherData temp) =
24+createWeatherReport :: WeatherProvider.WeatherData -> WeatherReport
25+createWeatherReport (WeatherProvider.WeatherData temp) =
26 "The current temperature in London is " ++ (show temp)
27
28 -- | Domain logic that uses external dependency to get data and process it.
29 getCurrentWeatherReportInLondon :: Handle -> IO WeatherReport
30 getCurrentWeatherReportInLondon (Handle wph) = do
31- weatherData <- SuperWeatherProvider.getWeatherData wph "London" "now"
32+ weatherData <- WeatherProvider.getWeatherData wph "London" "now"
33 return $ createWeatherReport weatherData