content: {-# LANGUAGE ConstraintKinds #-}
  {-# LANGUAGE KindSignatures #-}
  {-# LANGUAGE TypeInType #-}
  
  -- | Defines a capability type class for a reader effect. A reader provides an
  -- environment, say an initialization context or a configuration. The
  -- environment held in the reader effect can be changed (with 'local') within
  -- the scope of a sub-computation. Contrary to the "Capability.State", such
  -- a change is local, and does not persist when the 'local' call ends.
  
  module Capability.Reader
    ( -- * Relational capability
      module Capability.Reader.Internal.Class
      -- * Functional capability
    , HasReader'
    , TypeOf
      -- * Strategies
    , module Capability.Reader.Internal.Strategies
      -- ** Modifiers
    , module Capability.Accessors
    ) where
  
  import Capability.Accessors
  import Capability.Reader.Internal.Class
  import Capability.Reader.Internal.Strategies
  import Capability.TypeOf
  
  -- | Type synonym using the 'TypeOf' type family to specify 'HasReader'
  -- constraints without having to specify the type associated to a tag.
  type HasReader' (tag :: k) = HasReader tag (TypeOf k tag)
  