{-# LANGUAGE NoImplicitPrelude, PolymorphicComponents #-}

-- | This module provides a first-class version
-- of the "Data.Set" module.
module ModularPrelude.Module.Set
  ( -- * Module interface
    SetModule (..)
    -- * Module contents
  , SetImplements (..)
  ) where


import ModularPrelude hiding (empty)
import qualified Data.Set as Set


data SetModule = Set
  { SetModule
-> forall a b. (Ord a, Ord b) => (a -> b) -> Set a -> Set b
map         :: forall a b. (Ord a, Ord b) => (a -> b) -> Set a -> Set b
  , SetModule -> forall a. (a -> Bool) -> Set a -> Set a
filter      :: forall a. (a -> Bool) -> Set a -> Set a
  , SetModule -> forall a. Set a -> Int
length      :: forall a. Set a -> Int
  , SetModule -> forall a. a -> Set a
singleton   :: forall a. a -> Set a
  , SetModule -> forall a. Set a -> Bool
null        :: forall a. Set a -> Bool
  , SetModule -> forall a. Ord a => [a] -> Set a
pack        :: forall a. Ord a => [a] -> Set a
  , SetModule -> forall a. Set a -> [a]
unpack      :: forall a. Set a -> [a]
  , SetModule -> forall a. Ord a => [a] -> Set a
fromList    :: forall a. Ord a => [a] -> Set a
  , SetModule -> forall a. Set a -> [a]
toList      :: forall a. Set a -> [a]
  , SetModule -> forall a. Set a
empty       :: forall a. Set a
  , SetModule -> forall a. Ord a => a -> Set a -> Set a
insert      :: forall a. Ord a => a -> Set a -> Set a
  , SetModule -> forall a. Ord a => a -> Set a -> Set a
delete      :: forall a. Ord a => a -> Set a -> Set a
  , SetModule -> forall a. Ord a => a -> Set a -> Bool
member      :: forall a. Ord a => a -> Set a -> Bool
  }


class SetImplements interface where
  _Data_Set_ :: interface

instance SetImplements SetModule where
  _Data_Set_ :: SetModule
_Data_Set_ = Set
    { map :: forall a b. (Ord a, Ord b) => (a -> b) -> Set a -> Set b
map         = (a -> b) -> Set a -> Set b
forall a b. (Ord a, Ord b) => (a -> b) -> Set a -> Set b
forall b a. Ord b => (a -> b) -> Set a -> Set b
Set.map
    , filter :: forall a. (a -> Bool) -> Set a -> Set a
filter      = (a -> Bool) -> Set a -> Set a
forall a. (a -> Bool) -> Set a -> Set a
Set.filter
    , length :: forall a. Set a -> Int
length      = Set a -> Int
forall a. Set a -> Int
Set.size
    , singleton :: forall a. a -> Set a
singleton   = a -> Set a
forall a. a -> Set a
Set.singleton
    , null :: forall a. Set a -> Bool
null        = Set a -> Bool
forall a. Set a -> Bool
Set.null
    , pack :: forall a. Ord a => [a] -> Set a
pack        = [a] -> Set a
forall a. Ord a => [a] -> Set a
Set.fromList
    , unpack :: forall a. Set a -> [a]
unpack      = Set a -> [a]
forall a. Set a -> [a]
Set.toList
    , fromList :: forall a. Ord a => [a] -> Set a
fromList    = [a] -> Set a
forall a. Ord a => [a] -> Set a
Set.fromList
    , toList :: forall a. Set a -> [a]
toList      = Set a -> [a]
forall a. Set a -> [a]
Set.toList
    , empty :: forall a. Set a
empty       = Set a
forall a. Set a
Set.empty
    , insert :: forall a. Ord a => a -> Set a -> Set a
insert      = a -> Set a -> Set a
forall a. Ord a => a -> Set a -> Set a
Set.insert
    , delete :: forall a. Ord a => a -> Set a -> Set a
delete      = a -> Set a -> Set a
forall a. Ord a => a -> Set a -> Set a
Set.delete
    , member :: forall a. Ord a => a -> Set a -> Bool
member      = a -> Set a -> Bool
forall a. Ord a => a -> Set a -> Bool
Set.member
    }


instance Default SetModule where
  def :: SetModule
def = SetModule
forall interface. SetImplements interface => interface
_Data_Set_