summaryrefslogtreecommitdiff
path: root/Types/Test.hs
diff options
context:
space:
mode:
authorJoey Hess <joeyh@joeyh.name>2018-05-30 12:28:43 -0400
committerJoey Hess <joeyh@joeyh.name>2018-05-30 12:28:43 -0400
commit1c8ee99b4687f44e11868e8cbff68fe61a93f545 (patch)
tree07a6cd14eb3f83913f9669d7bbee282b0608266f /Types/Test.hs
parent519c693030182b4e7d19c4ea019cb26a040069a3 (diff)
Fix build with ghc 8.4+, which broke due to the Semigroup Monoid change
https://prime.haskell.org/wiki/Libraries/Proposals/SemigroupMonoid I am not happy with the fragile pile of CPP boilerplate required to support ghc back to 7.0, which git-annex still targets for both the android build and the standalone build targeting old linux kernels. It makes me unlikely to want to use Semigroup more in git-annex, because the benefit of the abstraction is swamped by the ugliness. I actually considered ripping out all the Semigroup instances, but some are needed to use optparse-applicative. The problem, I think, is they made this transaction on too fast a timeline. (Although ironically, work on it started in 2015 or earlier!) In particular, Debian oldstable is not out of security support, and it's not possible to follow the simpler workarounds documented on the wiki and have it build on oldstable (because the semigroups package in it is too old). I have only tested this build with ghc 8.2.2, not the newer and older versions that branches of the CPP support. So there could be typoes, we'll see. This commit was sponsored by Brock Spratlen on Patreon.
Diffstat (limited to 'Types/Test.hs')
-rw-r--r--Types/Test.hs30
1 files changed, 24 insertions, 6 deletions
diff --git a/Types/Test.hs b/Types/Test.hs
index 50c460f501..5a9a9e075c 100644
--- a/Types/Test.hs
+++ b/Types/Test.hs
@@ -5,11 +5,17 @@
- Licensed under the GNU GPL version 3 or higher.
-}
+{-# LANGUAGE CPP #-}
+
module Types.Test where
import Test.Tasty.Options
import Data.Monoid
+#if MIN_VERSION_base(4,9,0)
+import qualified Data.Semigroup as Sem
+#endif
import Prelude
+
import Types.Command
data TestOptions = TestOptions
@@ -19,13 +25,25 @@ data TestOptions = TestOptions
, internalData :: CmdParams
}
+appendTestOptions :: TestOptions -> TestOptions -> TestOptions
+appendTestOptions a b = TestOptions
+ (tastyOptionSet a <> tastyOptionSet b)
+ (keepFailuresOption a || keepFailuresOption b)
+ (fakeSsh a || fakeSsh b)
+ (internalData a <> internalData b)
+
+#if MIN_VERSION_base(4,9,0)
+instance Sem.Semigroup TestOptions where
+ (<>) = appendTestOptions
+#endif
+
instance Monoid TestOptions where
mempty = TestOptions mempty False False mempty
- mappend a b = TestOptions
- (tastyOptionSet a <> tastyOptionSet b)
- (keepFailuresOption a || keepFailuresOption b)
- (fakeSsh a || fakeSsh b)
- (internalData a <> internalData b)
-
+#if MIN_VERSION_base(4,11,0)
+#elif MIN_VERSION_base(4,9,0)
+ mappend = (Sem.<>)
+#else
+ mappend = appendTestOptions
+#endif
type TestRunner = TestOptions -> IO ()