{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-- |
-- Copyright: © 2022–2024 Jonathan Knowles
-- License: Apache-2.0
--
-- Provides the 'MultiMap' class, which models a total relation from unique
-- keys to sets of values.
--
-- = Implementations
--
-- The following example implementations are provided:
--
-- +----------------+------------------------+---------+
-- | Implementation | Types used             | Lawful? |
-- +================+=============+==========+=========+
-- | 'MultiMap1'    | 'Map'       | 'Set'    | 💥 No    |
-- +----------------+-------------+----------+---------+
-- | 'MultiMap2'    | 'Map'       | 'Set'    | ✅ Yes   |
-- +----------------+-------------+----------+---------+
-- | 'MultiMap3'    | 'Map'       | 'NESet'  | ✅ Yes   |
-- +----------------+-------------+----------+---------+
-- | 'MultiMap4'    | 'MonoidMap' | 'Set'    | ✅ Yes   |
-- +----------------+-------------+----------+---------+
--
module Examples.MultiMap
    ( MultiMap (..)
    ) where

import Data.Map.Strict
    ( Map )
import Data.MonoidMap
    ( MonoidMap )
import Data.Set
    ( Set )
import Data.Set.NonEmpty
    ( NESet )
import Examples.MultiMap.Class
    ( MultiMap (..) )
import Examples.MultiMap.Instances.MultiMap1
    ( MultiMap1 )
import Examples.MultiMap.Instances.MultiMap2
    ( MultiMap2 )
import Examples.MultiMap.Instances.MultiMap3
    ( MultiMap3 )
import Examples.MultiMap.Instances.MultiMap4
    ( MultiMap4 )