docs: def compose(*args):
      '''
      compose(g, h...) yields a potential function f that is the result of composing together all the
        arguments g, h, etc. after calling to_potential() on each. The result is defined such that
        f(x) is equivalent to g(h(...(x))).
      '''
      return reduce(lambda h,g: PotentialComposition(g,h), reversed(list(map(to_potential, args))))