def apply(self, something: 'Reader') -> 'Reader':
        r"""(<*>) :: f (a -> b) -> f a -> f b.

        Haskell: f <*> g = \x -> f x (g x)

        Apply (<*>) is a beefed up map. It takes a Reader that
        has a function in it and another Reader, and extracts that
        function from the first Reader and then maps it over the second
        one (composes the two functions).
        """

        def _compose(x: Any):
            f = self.run(x)
            try:
                ret = f(something.run(x))
            except TypeError:
                ret = partial(f, something.run(x))
            return ret

        return Reader(_compose)
def apply ( self , something : 'Reader' ) -> 'Reader' : def _compose ( x : Any ) : f = self . run ( x ) try : ret = f ( something . run ( x ) ) except TypeError : ret = partial ( f , something . run ( x ) ) return ret return Reader ( _compose )
r"""(<*>) :: f (a -> b) -> f a -> f b.

        Haskell: f <*> g = \x -> f x (g x)

        Apply (<*>) is a beefed up map. It takes a Reader that
        has a function in it and another Reader, and extracts that
        function from the first Reader and then maps it over the second
        one (composes the two functions).