{-# OPTIONS_GHC -fglasgow-exts -Wall -fno-warn-missing-signatures #-}

module Data.GMap.MaybeMap
(-- * EnumMap type
 MaybeMap
) where

import Data.GMap()

import Data.GMap.ChoiceMap
import Data.GMap.InjectKeys
import Data.GMap.UnitMap

--------------------------------------------------------------------------------------------
--                     Map Type for Maybe                 --
--------------------------------------------------------------------------------------------

data InjectMaybe k

instance Injection (InjectMaybe k) (Maybe k) (Choice2 k ()) where
	inject _ (Just k)  = C1of2 k
	inject _ Nothing   = C2of2 ()
	outject _ (C1of2 k) = Just k
	outject _ (C2of2 _) = Nothing

type MaybeMap map k = InjectKeys (InjectMaybe k) (Maybe k) (Choice2 k ()) (Choice2Map map UnitMap k ())