{-# LANGUAGE NoImplicitPrelude, PolymorphicComponents #-}

-- | This module provides a first-class version
-- of the "Data.HashMap.Lazy" module.
-- 
-- Note that the data type for this module is still HashMap,
-- and not LHashMap.
module ModularPrelude.Module.LHashMap
  ( -- * Module interface
    LHashMapModule (..)
    -- * Module contents
  , LHashMapImplements (..)
  ) where


import ModularPrelude hiding (empty)
import qualified Data.HashMap.Lazy as LHashMap


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


class LHashMapImplements interface where
  _Data_HashMap_Lazy_ :: interface

instance LHashMapImplements LHashMapModule where
  _Data_HashMap_Lazy_ :: LHashMapModule
_Data_HashMap_Lazy_ = LHashMap
    { map :: forall k a b. (a -> b) -> HashMap k a -> HashMap k b
map       = (a -> b) -> HashMap k a -> HashMap k b
forall v1 v2 k. (v1 -> v2) -> HashMap k v1 -> HashMap k v2
forall k a b. (a -> b) -> HashMap k a -> HashMap k b
LHashMap.map
    , filter :: forall k a. (k -> a -> Bool) -> HashMap k a -> HashMap k a
filter    = (k -> a -> Bool) -> HashMap k a -> HashMap k a
forall k a. (k -> a -> Bool) -> HashMap k a -> HashMap k a
LHashMap.filterWithKey
    , length :: forall k a. HashMap k a -> Int
length    = HashMap k a -> Int
forall k a. HashMap k a -> Int
LHashMap.size
    , singleton :: forall k a. Hashable k => k -> a -> HashMap k a
singleton = k -> a -> HashMap k a
forall k a. Hashable k => k -> a -> HashMap k a
LHashMap.singleton
    , null :: forall k a. HashMap k a -> Bool
null      = HashMap k a -> Bool
forall k a. HashMap k a -> Bool
LHashMap.null
    , pack :: forall k a. (Eq k, Hashable k) => [(k, a)] -> HashMap k a
pack      = [(k, a)] -> HashMap k a
forall k a. (Eq k, Hashable k) => [(k, a)] -> HashMap k a
LHashMap.fromList
    , unpack :: forall k a. HashMap k a -> [(k, a)]
unpack    = HashMap k a -> [(k, a)]
forall k a. HashMap k a -> [(k, a)]
LHashMap.toList
    , fromList :: forall k a. (Eq k, Hashable k) => [(k, a)] -> HashMap k a
fromList  = [(k, a)] -> HashMap k a
forall k a. (Eq k, Hashable k) => [(k, a)] -> HashMap k a
LHashMap.fromList
    , toList :: forall k a. HashMap k a -> [(k, a)]
toList    = HashMap k a -> [(k, a)]
forall k a. HashMap k a -> [(k, a)]
LHashMap.toList
    , lookup :: forall k a. (Eq k, Hashable k) => k -> HashMap k a -> Maybe a
lookup    = k -> HashMap k a -> Maybe a
forall k a. (Eq k, Hashable k) => k -> HashMap k a -> Maybe a
LHashMap.lookup
    , empty :: forall k a. HashMap k a
empty     = HashMap k a
forall k a. HashMap k a
LHashMap.empty
    , insert :: forall k a.
(Eq k, Hashable k) =>
k -> a -> HashMap k a -> HashMap k a
insert    = k -> a -> HashMap k a -> HashMap k a
forall k a.
(Eq k, Hashable k) =>
k -> a -> HashMap k a -> HashMap k a
LHashMap.insert
    , delete :: forall k a. (Eq k, Hashable k) => k -> HashMap k a -> HashMap k a
delete    = k -> HashMap k a -> HashMap k a
forall k a. (Eq k, Hashable k) => k -> HashMap k a -> HashMap k a
LHashMap.delete
    , member :: forall k a. (Eq k, Hashable k) => k -> HashMap k a -> Bool
member    = k -> HashMap k a -> Bool
forall k a. (Eq k, Hashable k) => k -> HashMap k a -> Bool
LHashMap.member
    }


instance Default LHashMapModule where
  def :: LHashMapModule
def = LHashMapModule
forall interface. LHashMapImplements interface => interface
_Data_HashMap_Lazy_