    {- |
    Module      :  Data.MapLike
    Copyright   :  (c) Eduard Sergeev 2011
    License     :  BSD-style (see the file LICENSE)

    Maintainer  :  eduard.sergeev@gmail.com
    Stability   :  experimental
    Portability :  non-portable (multi-param classes, functional dependencies)

    Defines MapLike typeclass - generalized interface to Data.Map, Data.HashMap etc.

    -}

    {-# LANGUAGE NoImplicitPrelude, MultiParamTypeClasses, FunctionalDependencies #-}

    module Data.MapLike (

       MapLike(..),

    ) where

    import Data.Maybe

    -- | An abstract interface to the container which can store 'v' indexed by 'k'
    class MapLike c k v | c -> k, c -> v where
        lookup :: k -> c -> Maybe v
        add :: k -> v -> c -> c