{-# OPTIONS_GHC -fglasgow-exts #-}

module Data.Mapping where

import Prelude hiding (lookup,map,filter,foldr,foldl,null)

import qualified Data.Map    as M
import qualified Data.IntMap as IM
import qualified Data.List   as List

import Data.Collection

class Collection (d e) (k, e) => Mapping d k e | d -> k where
    -- * Query
    lookup          :: (Monad m) => k -> d e -> m e

instance Ord k => Collection (M.Map k e) (k, e) where
    null      = M.null
    size      = M.size
    
    empty     = M.empty
    singleton = uncurry M.singleton
    insert    = uncurry M.insert

    toList    = M.toList
    fromList  = M.fromList

instance Ord k => Mapping (M.Map k) k e where
    lookup    = M.lookup

