module Conferer.Types where import Data.String import Data.Text (Text) import qualified Data.Text as Text data Provider = Provider { getKeyInProvider :: Key -> IO (Maybe Text) } newtype Key = Path { unKey :: [Text] } deriving (Show, Eq, Ord) keyName :: Key -> Text keyName = Text.intercalate "." . unKey data Config = Config { providers :: [Provider] } type ProviderCreator = Config -> IO Provider class FetchFromConfig a where fetch :: Key -> Config -> IO (Either Text a) instance IsString Key where fromString s = Path $ filter (/= mempty) $ Text.split (== '.') $ fromString s type Prefix = Text