docs: def asks(cls, fn: Callable) -> Reader:
          """
          Given a function it returns a Reader which evaluates that
          function and returns the result.
  
          asks :: (e -> a) -> R e a
          asks f = do
              e <- ask
              return $ f e
  
          asks sel = ask >>= return . sel
          """
          return cls.ask().bind(Reader(lambda x: cls.unit(fn(x))))