Skip to content

Commit 911b18e

Browse files
authored
Implement sconcat for Intersection (#1080)
1 parent b0b2cb5 commit 911b18e

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

containers/src/Data/IntSet/Internal.hs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,7 @@ import Data.Bits
196196
import qualified Data.List as List
197197
import Data.List.NonEmpty (NonEmpty(..))
198198
import Data.Maybe (fromMaybe)
199-
import Data.Semigroup
200-
(Semigroup(stimes), stimesIdempotent, stimesIdempotentMonoid)
201-
#if !(MIN_VERSION_base(4,11,0))
202-
import Data.Semigroup (Semigroup((<>)))
203-
#endif
199+
import Data.Semigroup (Semigroup(..), stimesIdempotent, stimesIdempotentMonoid)
204200
import Utils.Containers.Internal.Prelude hiding
205201
(filter, foldr, foldl, foldl', foldMap, null, map)
206202
import Prelude ()
@@ -224,6 +220,7 @@ import Data.IntSet.Internal.IntTreeCommons
224220
import Data.Data (Data(..), Constr, mkConstr, constrIndex, DataType, mkDataType)
225221
import qualified Data.Data
226222
import Text.Read
223+
import Data.Coerce (coerce)
227224
#endif
228225

229226
#if __GLASGOW_HASKELL__
@@ -687,6 +684,13 @@ instance Semigroup Intersection where
687684
stimes = stimesIdempotent
688685
{-# INLINABLE stimes #-}
689686

687+
sconcat =
688+
#ifdef __GLASGOW_HASKELL__
689+
coerce intersections
690+
#else
691+
Intersection . intersections . fmap getIntersection
692+
#endif
693+
690694
{--------------------------------------------------------------------
691695
Symmetric difference
692696
--------------------------------------------------------------------}

containers/src/Data/Set/Internal.hs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,7 @@ import Prelude ()
239239
import Control.Applicative (Const(..))
240240
import qualified Data.List as List
241241
import Data.Bits (shiftL, shiftR)
242-
import Data.Semigroup (Semigroup(stimes))
243-
#if !(MIN_VERSION_base(4,11,0))
244-
import Data.Semigroup (Semigroup((<>)))
245-
#endif
246-
import Data.Semigroup (stimesIdempotentMonoid, stimesIdempotent)
242+
import Data.Semigroup (Semigroup(..), stimesIdempotentMonoid, stimesIdempotent)
247243
import Data.Functor.Classes
248244
import Data.Functor.Identity (Identity)
249245
import qualified Data.Foldable as Foldable
@@ -265,6 +261,7 @@ import Data.Data
265261
import Language.Haskell.TH.Syntax (Lift)
266262
-- See Note [ Template Haskell Dependencies ]
267263
import Language.Haskell.TH ()
264+
import Data.Coerce (coerce)
268265
#endif
269266

270267

@@ -928,6 +925,14 @@ instance (Ord a) => Semigroup (Intersection a) where
928925
stimes = stimesIdempotent
929926
{-# INLINABLE stimes #-}
930927

928+
sconcat =
929+
#ifdef __GLASGOW_HASKELL__
930+
coerce intersections
931+
#else
932+
Intersection . intersections . fmap getIntersection
933+
#endif
934+
{-# INLINABLE sconcat #-}
935+
931936
{--------------------------------------------------------------------
932937
Symmetric difference
933938
--------------------------------------------------------------------}

0 commit comments

Comments
 (0)