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))))
def asks ( cls , fn : Callable ) -> Reader : return cls . ask ( ) . bind ( Reader ( lambda x : cls . unit ( fn ( x ) ) ) )
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