From ac24f1b9d624fbb3bf075bdb69dfc55ca277dd50 Mon Sep 17 00:00:00 2001 From: Bodigrim Date: Thu, 25 Nov 2021 19:27:16 +0000 Subject: [PATCH] Scale back changes to ShortByteString to pattern synonym only --- Data/ByteString/Short/Internal.hs | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/Data/ByteString/Short/Internal.hs b/Data/ByteString/Short/Internal.hs index 74805a046..9ec823ca0 100644 --- a/Data/ByteString/Short/Internal.hs +++ b/Data/ByteString/Short/Internal.hs @@ -6,10 +6,6 @@ {-# LANGUAGE Unsafe #-} {-# LANGUAGE TemplateHaskellQuotes #-} {-# LANGUAGE PatternSynonyms #-} -{-# LANGUAGE GeneralizedNewtypeDeriving #-} -#if MIN_VERSION_base(4,10,0) -{-# LANGUAGE DerivingStrategies #-} -#endif {-# OPTIONS_HADDOCK not-home #-} @@ -60,19 +56,17 @@ module Data.ByteString.Short.Internal ( #if BYTEARRAY_IN_BASE import Data.Array.Byte -import Data.Semigroup (Semigroup) -#else -import Data.Typeable (Typeable) -import Data.Semigroup (Semigroup((<>))) -import Control.DeepSeq (NFData(..)) #endif import Data.ByteString.Internal (ByteString(..), accursedUnutterablePerformIO) import qualified Data.ByteString.Internal as BS +import Data.Typeable (Typeable) import Data.Data (Data(..), mkNoRepType) +import Data.Semigroup (Semigroup((<>))) import Data.Monoid (Monoid(..)) import Data.String (IsString(..)) +import Control.DeepSeq (NFData(..)) import qualified Data.List as List (length) import Foreign.C.String (CString, CStringLen) import Foreign.C.Types (CSize(..), CInt(..)) @@ -128,7 +122,7 @@ import qualified Language.Haskell.TH.Syntax as TH -- #if BYTEARRAY_IN_BASE newtype ShortByteString = ShortByteString { unShortByteString :: ByteArray } - deriving newtype (Eq, Semigroup, Monoid) + deriving Typeable pattern SBS :: ByteArray# -> ShortByteString pattern SBS x = ShortByteString (ByteArray x) @@ -165,16 +159,14 @@ instance TH.Lift ShortByteString where -- the 0--3 trailing bytes undefined. This means we can use word-sized writes, -- but we have to be careful with reads, see equateBytes and compareBytes below. -#if !BYTEARRAY_IN_BASE + instance Eq ShortByteString where (==) = equateBytes -#endif -- | Lexicographic order. instance Ord ShortByteString where compare = compareBytes -#if !BYTEARRAY_IN_BASE instance Semigroup ShortByteString where (<>) = append @@ -185,7 +177,6 @@ instance Monoid ShortByteString where instance NFData ShortByteString where rnf SBS{} = () -#endif instance Show ShortByteString where showsPrec p ps r = showsPrec p (unpackChars ps) r @@ -196,13 +187,8 @@ instance Read ShortByteString where -- | @since 0.10.12.0 instance GHC.Exts.IsList ShortByteString where type Item ShortByteString = Word8 -#if BYTEARRAY_IN_BASE - fromList = ShortByteString . GHC.Exts.fromList - toList = GHC.Exts.toList . unShortByteString -#else fromList = packBytes toList = unpackBytes -#endif -- | Beware: 'fromString' truncates multi-byte characters to octets. -- e.g. "枯朶に烏のとまりけり秋の暮" becomes �6k�nh~�Q��n� @@ -430,7 +416,6 @@ unpackAppendBytesStrict !sbs off len = go (off-1) (off-1 + len) ------------------------------------------------------------------------ -- Eq and Ord implementations -#if !BYTEARRAY_IN_BASE equateBytes :: ShortByteString -> ShortByteString -> Bool equateBytes sbs1 sbs2 = let !len1 = length sbs1 @@ -438,7 +423,6 @@ equateBytes sbs1 sbs2 = in len1 == len2 && 0 == accursedUnutterablePerformIO (memcmp_ByteArray (asBA sbs1) (asBA sbs2) len1) -#endif compareBytes :: ShortByteString -> ShortByteString -> Ordering compareBytes sbs1 sbs2 = @@ -453,10 +437,10 @@ compareBytes sbs1 sbs2 = | len2 < len1 -> GT | otherwise -> EQ + ------------------------------------------------------------------------ -- Appending and concatenation -#if !BYTEARRAY_IN_BASE append :: ShortByteString -> ShortByteString -> ShortByteString append src1 src2 = let !len1 = length src1 @@ -478,7 +462,7 @@ concat sbss = let !len = length src copyByteArray (asBA src) 0 dst off len copy dst (off + len) sbss -#endif + ------------------------------------------------------------------------ -- Exported low level operations