docs: 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)