Don't use * as Type in the presence of TypeOperators
authorVladislav Zavialov <vlad.z.4096@gmail.com>
Tue, 29 May 2018 09:19:31 +0000 (12:19 +0300)
committerVladislav Zavialov <vlad.z.4096@gmail.com>
Thu, 7 Jun 2018 10:08:30 +0000 (13:08 +0300)
src/Data/Binary/Generic.hs

index 7282ff6..feb85d7 100644 (file)
@@ -3,6 +3,10 @@
 {-# LANGUAGE Safe #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
+#if __GLASGOW_HASKELL__ >= 800
+#define HAS_DATA_KIND
+#endif
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      : Data.Binary.Generic
@@ -27,6 +31,9 @@ import Data.Binary.Put
 import Data.Bits
 import Data.Word
 import Data.Monoid ((<>))
+#ifdef HAS_DATA_KIND
+import Data.Kind
+#endif
 import GHC.Generics
 import Prelude -- Silence AMP warning.
 
@@ -136,7 +143,11 @@ instance GBinaryPut a => GSumPut (C1 c a) where
 class SumSize f where
     sumSize :: Tagged f Word64
 
-newtype Tagged (s :: * -> *) b = Tagged {unTagged :: b}
+#ifdef HAS_DATA_KIND
+newtype Tagged (s :: Type -> Type) b = Tagged {unTagged :: b}
+#else
+newtype Tagged (s :: * -> *)       b = Tagged {unTagged :: b}
+#endif
 
 instance (SumSize a, SumSize b) => SumSize (a :+: b) where
     sumSize = Tagged $ unTagged (sumSize :: Tagged a Word64) +