    module RIO.Prelude.Lens
      ( view
      , Lens.Micro.ASetter
      , Lens.Micro.ASetter'
      , Lens.Micro.Getting
      , Lens.Micro.Lens
      , Lens.Micro.Lens'
      , Lens.Micro.SimpleGetter
      , Lens.Micro.lens
      , Lens.Micro.over
      , Lens.Micro.set
      , Lens.Micro.sets
      , Lens.Micro.to
      , (Lens.Micro.^.)
      ) where

    import Lens.Micro
    import Control.Monad.Reader (MonadReader, asks)
    import           Lens.Micro.Internal      (( #. ))
    import           Control.Applicative      (Const (..))

    view :: MonadReader s m => Getting a s a -> m a
    view l = asks (getConst #. l Const)