{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -Wall #-}
module Data.Set.Unboxed
( S.Set
, empty
, singleton
, doubleton
, tripleton
, null
, member
, size
, difference
, (\\)
, intersection
, subset
, intersects
, enumFromTo
, S.toList
, S.fromList
, toArray
, foldr
, foldMap
, foldl'
, foldr'
, foldMap'
, traverse_
, itraverse_
, mapMonotonic
) where
import Prelude hiding (foldr,foldMap,null,enumFromTo)
import Data.Hashable (Hashable)
import Data.Primitive.PrimArray (PrimArray)
import Data.Primitive.Types (Prim)
import Data.Primitive.Unlifted.Class (PrimUnlifted(..))
import Data.Semigroup (Semigroup)
import Data.Set.Unboxed.Internal (Set(..))
import qualified Data.Foldable as F
import qualified Data.Hashable as H
import qualified Data.Semigroup as SG
import qualified GHC.Exts as E
import qualified Data.Set.Internal as I
import qualified Data.Set.Unboxed.Internal as S
empty :: Set a
empty :: forall a. Set a
empty = forall a. Set PrimArray a -> Set a
Set forall (arr :: * -> *) a. Contiguous arr => Set arr a
I.empty
difference :: (Ord a, Prim a) => Set a -> Set a -> Set a
difference :: forall a. (Ord a, Prim a) => Set a -> Set a -> Set a
difference (Set Set PrimArray a
x) (Set Set PrimArray a
y) = forall a. Set PrimArray a -> Set a
Set (forall a (arr :: * -> *).
(ContiguousU arr, Element arr a, Ord a) =>
Set arr a -> Set arr a -> Set arr a
I.difference Set PrimArray a
x Set PrimArray a
y)
(\\) :: (Ord a, Prim a) => Set a -> Set a -> Set a
\\ :: forall a. (Ord a, Prim a) => Set a -> Set a -> Set a
(\\) (Set Set PrimArray a
x) (Set Set PrimArray a
y) = forall a. Set PrimArray a -> Set a
Set (forall a (arr :: * -> *).
(ContiguousU arr, Element arr a, Ord a) =>
Set arr a -> Set arr a -> Set arr a
I.difference Set PrimArray a
x Set PrimArray a
y)
intersection :: (Ord a, Prim a) => Set a -> Set a -> Set a
intersection :: forall a. (Ord a, Prim a) => Set a -> Set a -> Set a
intersection (Set Set PrimArray a
x) (Set Set PrimArray a
y) = forall a. Set PrimArray a -> Set a
Set (forall a (arr :: * -> *).
(ContiguousU arr, Element arr a, Ord a) =>
Set arr a -> Set arr a -> Set arr a
I.intersection Set PrimArray a
x Set PrimArray a
y)
intersects :: (Ord a, Prim a) => Set a -> Set a -> Bool
intersects :: forall a. (Ord a, Prim a) => Set a -> Set a -> Bool
intersects (Set Set PrimArray a
x) (Set Set PrimArray a
y) = forall a (arr :: * -> *).
(Contiguous arr, Element arr a, Ord a) =>
Set arr a -> Set arr a -> Bool
I.intersects Set PrimArray a
x Set PrimArray a
y
subset :: (Ord a, Prim a) => Set a -> Set a -> Bool
subset :: forall a. (Ord a, Prim a) => Set a -> Set a -> Bool
subset (Set Set PrimArray a
x) (Set Set PrimArray a
y) = forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Ord a) =>
Set arr a -> Set arr a -> Bool
I.subset Set PrimArray a
x Set PrimArray a
y
enumFromTo :: (Enum a, Ord a, Num a, Prim a)
=> a
-> a
-> Set a
enumFromTo :: forall a. (Enum a, Ord a, Num a, Prim a) => a -> a -> Set a
enumFromTo a
lo a
hi = forall a. Set PrimArray a -> Set a
Set (forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Enum a, Ord a, Num a) =>
a -> a -> Set arr a
I.enumFromTo a
lo a
hi)
member :: (Prim a, Ord a) => a -> Set a -> Bool
member :: forall a. (Prim a, Ord a) => a -> Set a -> Bool
member a
a (Set Set PrimArray a
s) = forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Ord a) =>
a -> Set arr a -> Bool
I.member a
a Set PrimArray a
s
null :: Set a -> Bool
null :: forall a. Set a -> Bool
null (Set Set PrimArray a
s) = forall (arr :: * -> *) a. Contiguous arr => Set arr a -> Bool
I.null Set PrimArray a
s
singleton :: Prim a => a -> Set a
singleton :: forall a. Prim a => a -> Set a
singleton = forall a. Set PrimArray a -> Set a
Set forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
a -> Set arr a
I.singleton
doubleton :: (Prim a, Ord a) => a -> a -> Set a
doubleton :: forall a. (Prim a, Ord a) => a -> a -> Set a
doubleton a
a a
b = forall a. Set PrimArray a -> Set a
Set (forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Ord a) =>
a -> a -> Set arr a
I.doubleton a
a a
b)
tripleton :: (Prim a, Ord a) => a -> a -> a -> Set a
tripleton :: forall a. (Prim a, Ord a) => a -> a -> a -> Set a
tripleton a
a a
b a
c = forall a. Set PrimArray a -> Set a
Set (forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Ord a) =>
a -> a -> a -> Set arr a
I.tripleton a
a a
b a
c)
size :: Prim a => Set a -> Int
size :: forall a. Prim a => Set a -> Int
size (Set Set PrimArray a
s) = forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
Set arr a -> Int
I.size Set PrimArray a
s
foldr :: Prim a
=> (a -> b -> b)
-> b
-> Set a
-> b
foldr :: forall a b. Prim a => (a -> b -> b) -> b -> Set a -> b
foldr a -> b -> b
f b
b0 (Set Set PrimArray a
s) = forall (arr :: * -> *) a b.
(Contiguous arr, Element arr a) =>
(a -> b -> b) -> b -> Set arr a -> b
I.foldr a -> b -> b
f b
b0 Set PrimArray a
s
foldl' :: Prim a
=> (b -> a -> b)
-> b
-> Set a
-> b
foldl' :: forall a b. Prim a => (b -> a -> b) -> b -> Set a -> b
foldl' b -> a -> b
f b
b0 (Set Set PrimArray a
s) = forall (arr :: * -> *) a b.
(Contiguous arr, Element arr a) =>
(b -> a -> b) -> b -> Set arr a -> b
I.foldl' b -> a -> b
f b
b0 Set PrimArray a
s
foldr' :: Prim a
=> (a -> b -> b)
-> b
-> Set a
-> b
foldr' :: forall a b. Prim a => (a -> b -> b) -> b -> Set a -> b
foldr' a -> b -> b
f b
b0 (Set Set PrimArray a
s) = forall (arr :: * -> *) a b.
(Contiguous arr, Element arr a) =>
(a -> b -> b) -> b -> Set arr a -> b
I.foldr' a -> b -> b
f b
b0 Set PrimArray a
s
foldMap' :: (Monoid m, Prim a)
=> (a -> m)
-> Set a
-> m
foldMap' :: forall m a. (Monoid m, Prim a) => (a -> m) -> Set a -> m
foldMap' a -> m
f (Set Set PrimArray a
arr) = forall (arr :: * -> *) a m.
(Contiguous arr, Element arr a, Monoid m) =>
(a -> m) -> Set arr a -> m
I.foldMap' a -> m
f Set PrimArray a
arr
foldMap :: (Monoid m, Prim a)
=> (a -> m)
-> Set a
-> m
foldMap :: forall m a. (Monoid m, Prim a) => (a -> m) -> Set a -> m
foldMap a -> m
f (Set Set PrimArray a
arr) = forall (arr :: * -> *) a m.
(Contiguous arr, Element arr a, Monoid m) =>
(a -> m) -> Set arr a -> m
I.foldMap a -> m
f Set PrimArray a
arr
toArray :: Set a -> PrimArray a
toArray :: forall a. Set a -> PrimArray a
toArray (Set Set PrimArray a
s) = forall (arr :: * -> *) a. Set arr a -> arr a
I.toArray Set PrimArray a
s
traverse_ :: (Applicative m, Prim a)
=> (a -> m b)
-> Set a
-> m ()
traverse_ :: forall (m :: * -> *) a b.
(Applicative m, Prim a) =>
(a -> m b) -> Set a -> m ()
traverse_ a -> m b
f (Set Set PrimArray a
arr) = forall (arr :: * -> *) a (m :: * -> *) b.
(Contiguous arr, Element arr a, Applicative m) =>
(a -> m b) -> Set arr a -> m ()
I.traverse_ a -> m b
f Set PrimArray a
arr
itraverse_ :: (Applicative m, Prim a)
=> (Int -> a -> m b)
-> Set a
-> m ()
itraverse_ :: forall (m :: * -> *) a b.
(Applicative m, Prim a) =>
(Int -> a -> m b) -> Set a -> m ()
itraverse_ Int -> a -> m b
f (Set Set PrimArray a
arr) = forall (arr :: * -> *) a (m :: * -> *) b.
(Contiguous arr, Element arr a, Applicative m) =>
(Int -> a -> m b) -> Set arr a -> m ()
I.itraverse_ Int -> a -> m b
f Set PrimArray a
arr
{-# INLINEABLE itraverse_ #-}
mapMonotonic :: (Prim a, Prim b)
=> (a -> b)
-> Set a
-> Set b
mapMonotonic :: forall a b. (Prim a, Prim b) => (a -> b) -> Set a -> Set b
mapMonotonic a -> b
f (Set Set PrimArray a
arr) = forall a. Set PrimArray a -> Set a
Set (forall (arr :: * -> *) a b.
(Contiguous arr, Element arr a, Element arr b) =>
(a -> b) -> Set arr a -> Set arr b
I.map a -> b
f Set PrimArray a
arr)
{-# INLINEABLE mapMonotonic #-}