module Conferer.Provider.Namespaced ( -- * Namespaced higher-order provider -- | This provider takes a provider and returns a new provider that -- always checks that the 'Key' given always starts with certain 'Key' -- and then strips that prefix before consulting its inner Provider mkNamespacedProvider ) where import Data.List (stripPrefix) import Conferer.Types -- | Create a 'ProviderCreator' from a prefix and another 'ProviderCreator' mkNamespacedProvider :: Key -> ProviderCreator -> ProviderCreator mkNamespacedProvider (Path key) configCreator = \config -> do configProvider <- configCreator config return $ Provider { getKeyInProvider = \(Path k) -> do case stripPrefix key k of Just newKey -> getKeyInProvider configProvider (Path newKey) Nothing -> return Nothing }