code: def _chain(first_func, *funcs) -> Callable:
      
      @wraps(first_func)
      def wrapper(*args, **kwargs):
          result = first_func(*args, **kwargs)
          for func in funcs:
              result = func(result)
          return result
      return wrapper
docs: Chains a give number of functions.
      First function receives all args/kwargs. Its result is passed on as an argument
      to the second one and so on and so forth until all function arguments are used.
      The last result is then returned.