{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
module Data.Set.Lifted
( Set
, empty
, singleton
, null
, member
, lookupIndex
, size
, difference
, (\\)
, intersection
, subset
, intersects
, toArray
, LI.toList
, LI.fromList
, LI.foldr
, LI.foldl'
, LI.foldr'
, foldMap'
, foldMap
, traverse_
, itraverse_
) where
import Prelude hiding (foldr,foldMap,null)
import Data.Semigroup (Semigroup)
import Data.Set.Lifted.Internal (Set(..))
import Data.Primitive (Array)
import qualified Data.Set.Internal as I
import qualified Data.Set.Lifted.Internal as LI
difference :: Ord a => Set a -> Set a -> Set a
difference :: forall a. Ord a => Set a -> Set a -> Set a
difference (Set Set Array a
x) (Set Set Array a
y) = forall a. Set Array 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 Array a
x Set Array a
y)
intersection :: Ord a => Set a -> Set a -> Set a
intersection :: forall a. Ord a => Set a -> Set a -> Set a
intersection (Set Set Array a
x) (Set Set Array a
y) = forall a. Set Array 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 Array a
x Set Array a
y)
intersects :: Ord a => Set a -> Set a -> Bool
intersects :: forall a. Ord a => Set a -> Set a -> Bool
intersects (Set Set Array a
x) (Set Set Array a
y) = forall a (arr :: * -> *).
(Contiguous arr, Element arr a, Ord a) =>
Set arr a -> Set arr a -> Bool
I.intersects Set Array a
x Set Array a
y
subset :: Ord a => Set a -> Set a -> Bool
subset :: forall a. Ord a => Set a -> Set a -> Bool
subset (Set Set Array a
x) (Set Set Array a
y) = forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Ord a) =>
Set arr a -> Set arr a -> Bool
I.subset Set Array a
x Set Array a
y
empty :: Set a
empty :: forall a. Set a
empty = forall a. Set Array a -> Set a
Set forall (arr :: * -> *) a. Contiguous arr => Set arr a
I.empty
(\\) :: Ord a => Set a -> Set a -> Set a
\\ :: forall a. Ord a => Set a -> Set a -> Set a
(\\) (Set Set Array a
x) (Set Set Array a
y) = forall a. Set Array 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 Array a
x Set Array a
y)
null :: Set a -> Bool
null :: forall a. Set a -> Bool
null (Set Set Array a
s) = forall (arr :: * -> *) a. Contiguous arr => Set arr a -> Bool
I.null Set Array a
s
member :: Ord a => a -> Set a -> Bool
member :: forall a. Ord a => a -> Set a -> Bool
member a
a (Set Set Array a
s) = forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Ord a) =>
a -> Set arr a -> Bool
I.member a
a Set Array a
s
lookupIndex :: Ord a => a -> Set a -> Maybe Int
lookupIndex :: forall a. Ord a => a -> Set a -> Maybe Int
lookupIndex a
a (Set Set Array a
s) = forall (arr :: * -> *) a.
(Contiguous arr, Element arr a, Ord a) =>
a -> Set arr a -> Maybe Int
I.lookupIndex a
a Set Array a
s
singleton :: a -> Set a
singleton :: forall a. a -> Set a
singleton = forall a. Set Array 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
size :: Set a -> Int
size :: forall a. Set a -> Int
size (Set Set Array a
s) = forall (arr :: * -> *) a.
(Contiguous arr, Element arr a) =>
Set arr a -> Int
I.size Set Array a
s
foldMap' :: Monoid m
=> (a -> m)
-> Set a
-> m
foldMap' :: forall m a. Monoid m => (a -> m) -> Set a -> m
foldMap' a -> m
f (Set Set Array 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 Array a
arr
foldMap :: Monoid m
=> (a -> m)
-> Set a
-> m
foldMap :: forall m a. Monoid m => (a -> m) -> Set a -> m
foldMap a -> m
f (Set Set Array 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 Array a
arr
toArray :: Set a -> Array a
toArray :: forall a. Set a -> Array a
toArray (Set Set Array a
s) = forall (arr :: * -> *) a. Set arr a -> arr a
I.toArray Set Array a
s
traverse_ :: Applicative m
=> (a -> m b)
-> Set a
-> m ()
traverse_ :: forall (m :: * -> *) a b.
Applicative m =>
(a -> m b) -> Set a -> m ()
traverse_ a -> m b
f (Set Set Array 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 Array a
arr
itraverse_ :: Applicative m
=> (Int -> a -> m b)
-> Set a
-> m ()
itraverse_ :: forall (m :: * -> *) a b.
Applicative m =>
(Int -> a -> m b) -> Set a -> m ()
itraverse_ Int -> a -> m b
f (Set Set Array 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 Array a
arr
{-# INLINEABLE itraverse_ #-}