module Data.Record.Context ( ContextStyle, app ) where -- Data import Data.Record as Record -- Fixities infixr 0 `app` {-| The context consumer and context producer record styles. @ContextConnectorStyle /context/ 'Consumer'@ is the style of context consumer records with context @/context/@ and @ContextConnectorStyle /context/ 'Producer'@ is the style of context producer records with context @/context/@. Fields of context connector style records have the form @/name/ ::~~ /connectorGenerator/@. -} data ContextStyle context style instance (Style style) => Style (ContextStyle context style) where type K (ContextStyle context style) = K style type instance Value (ContextStyle context style) sort = context -> Value style sort {-| Applies all values of a context connector record to a given context to form an ordinary context record. -} app :: (Style style, Record (K style) record) => record (ContextStyle context style) -> context -> record style app contextRecord context = Record.map transformer contextRecord where transformer = encase (TransformerPiece (\valInContext -> valInContext context))