key-vault-0.1.0.0: src/Data/Vault.hs
module Data.Vault (Vault, alterF) where
import Control.Monad.Trans.Key
import Data.Map (Map)
import qualified Data.Map as Map
import GHC.Exts (Any)
import Numeric.Natural
import Unsafe.Coerce
newtype Vault s = Vault { unVault :: Map Natural Any }
alterF :: (Functor f) => (Maybe a -> KeyringT s f (Maybe a)) -> Key s a -> Vault s -> KeyringT s f (Vault s)
alterF f k = fmap Vault . Map.alterF f' (unsafeCoerce k) . unVault
where f' = unsafeCoerce f :: Maybe Any -> KeyringT s f (Maybe Any)