Define Semigroup instances for base>=4.9
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 28 Nov 2015 20:39:19 +0000 (21:39 +0100)
committerHerbert Valerio Riedel <hvr@gnu.org>
Sat, 28 Nov 2015 20:39:19 +0000 (21:39 +0100)
See https://github.com/ekmett/semigroups/issues/56 for more details

Data/ByteString/Builder/Internal.hs
Data/ByteString/Internal.hs
Data/ByteString/Lazy/Internal.hs
Data/ByteString/Short/Internal.hs

index 90512e7..f5a2509 100644 (file)
@@ -130,6 +130,9 @@ module Data.ByteString.Builder.Internal (
 
 import           Control.Arrow (second)
 
+#if MIN_VERSION_base(4,9,0)
+import           Data.Semigroup (Semigroup((<>)))
+#endif
 #if !(MIN_VERSION_base(4,8,0))
 import           Data.Monoid
 import           Control.Applicative (Applicative(..),(<$>))
@@ -399,11 +402,21 @@ empty = Builder (\cont -> (\range -> cont range))
 append :: Builder -> Builder -> Builder
 append (Builder b1) (Builder b2) = Builder $ b1 . b2
 
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup Builder where
+  {-# INLINE (<>) #-}
+  (<>) = append
+#endif
+
 instance Monoid Builder where
   {-# INLINE mempty #-}
   mempty = empty
   {-# INLINE mappend #-}
+#if MIN_VERSION_base(4,9,0)
+  mappend = (<>)
+#else
   mappend = append
+#endif
   {-# INLINE mconcat #-}
   mconcat = foldr mappend mempty
 
index 02ba01e..2565a49 100644 (file)
@@ -89,6 +89,9 @@ import Foreign.C.Types          (CInt, CSize, CULong)
 #endif
 import Foreign.C.String         (CString)
 
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup           (Semigroup((<>)))
+#endif
 #if !(MIN_VERSION_base(4,8,0))
 import Data.Monoid              (Monoid(..))
 #endif
@@ -150,9 +153,18 @@ instance Eq  ByteString where
 instance Ord ByteString where
     compare = compareBytes
 
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup ByteString where
+    (<>)    = append
+#endif
+
 instance Monoid ByteString where
     mempty  = PS nullForeignPtr 0 0
+#if MIN_VERSION_base(4,9,0)
+    mappend = (<>)
+#else
     mappend = append
+#endif
     mconcat = concat
 
 instance NFData ByteString where
index 2d71732..964f23b 100644 (file)
@@ -51,6 +51,9 @@ import qualified Data.ByteString          as S (length, take, drop)
 import Data.Word        (Word8)
 import Foreign.Storable (Storable(sizeOf))
 
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup   (Semigroup((<>)))
+#endif
 #if !(MIN_VERSION_base(4,8,0))
 import Data.Monoid      (Monoid(..))
 #endif
@@ -77,9 +80,18 @@ instance Eq  ByteString where
 instance Ord ByteString where
     compare = cmp
 
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup ByteString where
+    (<>)    = append
+#endif
+
 instance Monoid ByteString where
     mempty  = Empty
+#if MIN_VERSION_base(4,9,0)
+    mappend = (<>)
+#else
     mappend = append
+#endif
     mconcat = concat
 
 instance NFData ByteString where
index 1946271..15308d6 100644 (file)
@@ -40,6 +40,9 @@ import Data.ByteString.Internal (ByteString(..), accursedUnutterablePerformIO)
 
 import Data.Typeable    (Typeable)
 import Data.Data        (Data(..), mkNoRepType)
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup   (Semigroup((<>)))
+#endif
 import Data.Monoid      (Monoid(..))
 import Data.String      (IsString(..))
 import Control.DeepSeq  (NFData(..))
@@ -131,9 +134,18 @@ instance Eq ShortByteString where
 instance Ord ShortByteString where
     compare = compareBytes
 
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup ShortByteString where
+    (<>)    = append
+#endif
+
 instance Monoid ShortByteString where
     mempty  = empty
+#if MIN_VERSION_base(4,9,0)
+    mappend = (<>)
+#else
     mappend = append
+#endif
     mconcat = concat
 
 instance NFData ShortByteString where