web-routing-0.3.0: src/Network/Routing/Dict.hs
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE DataKinds #-}
module Network.Routing.Dict
( -- * store
Store
, empty
, type (</)
, add
-- * dictionary
, Dict
, Member
, get
-- * types
, ShowDict
, KV(..)
-- * convenient
, Members
) where
import GHC.Exts(Constraint)
import Network.Routing.Dict.Internal
-- | type family to constraint multi kvs.
--
-- > Members ["foo" := Int, "bar" := Double] prms == (Member "foo" Int prms, Member "bar" Double prms)
--
type family Members (kvs :: [KV *]) (prms :: [KV *]) :: Constraint
type instance Members '[] prms = ()
type instance Members (k := v ': kvs) prms = (Member k v prms, Members kvs prms)