{-# LANGUAGE NoImplicitPrelude, PolymorphicComponents #-}

-- | This module provides a first-class version
-- of the "Data.HashSet" module.
module ModularPrelude.Module.HashSet
  ( -- * Module interface
    HashSetModule (..)
    -- * Module contents
  , HashSetImplements (..)
  ) where


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


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


class HashSetImplements interface where
  _Data_HashSet_ :: interface

instance HashSetImplements HashSetModule where
  _Data_HashSet_ :: HashSetModule
_Data_HashSet_ = HashSet
    { map :: forall a b.
(Hashable b, Eq b) =>
(a -> b) -> HashSet a -> HashSet b
map         = (a -> b) -> HashSet a -> HashSet b
forall b a.
(Hashable b, Eq b) =>
(a -> b) -> HashSet a -> HashSet b
forall a b.
(Hashable b, Eq b) =>
(a -> b) -> HashSet a -> HashSet b
HashSet.map
    , filter :: forall a. (a -> Bool) -> HashSet a -> HashSet a
filter      = (a -> Bool) -> HashSet a -> HashSet a
forall a. (a -> Bool) -> HashSet a -> HashSet a
HashSet.filter
    , length :: forall a. HashSet a -> Int
length      = HashSet a -> Int
forall a. HashSet a -> Int
HashSet.size
    , singleton :: forall a. Hashable a => a -> HashSet a
singleton   = a -> HashSet a
forall a. Hashable a => a -> HashSet a
HashSet.singleton
    , null :: forall a. HashSet a -> Bool
null        = HashSet a -> Bool
forall a. HashSet a -> Bool
HashSet.null
    , pack :: forall a. (Eq a, Hashable a) => [a] -> HashSet a
pack        = [a] -> HashSet a
forall a. (Eq a, Hashable a) => [a] -> HashSet a
HashSet.fromList
    , unpack :: forall a. HashSet a -> [a]
unpack      = HashSet a -> [a]
forall a. HashSet a -> [a]
HashSet.toList
    , fromList :: forall a. (Eq a, Hashable a) => [a] -> HashSet a
fromList    = [a] -> HashSet a
forall a. (Eq a, Hashable a) => [a] -> HashSet a
HashSet.fromList
    , toList :: forall a. HashSet a -> [a]
toList      = HashSet a -> [a]
forall a. HashSet a -> [a]
HashSet.toList
    , empty :: forall a. HashSet a
empty       = HashSet a
forall a. HashSet a
HashSet.empty
    , insert :: forall a. (Eq a, Hashable a) => a -> HashSet a -> HashSet a
insert      = a -> HashSet a -> HashSet a
forall a. (Eq a, Hashable a) => a -> HashSet a -> HashSet a
HashSet.insert
    , delete :: forall a. (Eq a, Hashable a) => a -> HashSet a -> HashSet a
delete      = a -> HashSet a -> HashSet a
forall a. (Eq a, Hashable a) => a -> HashSet a -> HashSet a
HashSet.delete
    , member :: forall a. (Eq a, Hashable a) => a -> HashSet a -> Bool
member      = a -> HashSet a -> Bool
forall a. (Eq a, Hashable a) => a -> HashSet a -> Bool
HashSet.member
    }


instance Default HashSetModule where
  def :: HashSetModule
def = HashSetModule
forall interface. HashSetImplements interface => interface
_Data_HashSet_