 	 * If the list is an array, it should be a list of functions or promises,
 	 * and each function will return a promise.
 	 * If the list is a function, it should be a iterator that returns
-	 * a promise, when it returns `utils.end`, the iteration ends.
+	 * a promise, when it returns `utils.end`, the iteration ends. Of course
+	 * it can never end.
 	 * @param {Boolean} saveResults Whether to save each promise's result or
 	 * not. Default is true.
 	 * @param {Function} progress If a task ends, the resolve value will be

		else if fns.length > 1
			iter = genIter fns
		else
			return Promise.reject new Error 'wrong argument type: ' + fn

		utils.end ?= {}


	###*
	 * Throw an error to break the program.
	 * @param  {Any} err
	 * @example
	 * ```coffee
	 * Promise.resolve().then ->
	 * 	# This error won't be caught by promise.
	 * 	utils.throw 'break the program!'
	 * ```
	###
	throw: (err) ->
		setTimeout -> err
