 				for fn in functions
 					result = fn.apply @, arguments
 				result
-		compose: ->
-			functions = Array::slice.call arguments
+		compose: (functions...) ->
 			->
 				lastReturn = arguments
 				for fn, i in functions.reverse()

				fn = funcTable[arguments.length]
				return undefined unless fn? and fn instanceof Function
				fn.apply @, arguments
	}

	Function.extend 'concat', Function.concatenate


					# argument given during this call, else use the predefiend argument
					collectedArgs.push (if !arg? or arg is Function._ then passedArgs.shift() else arg)
				original.apply @, collectedArgs.concat(passedArgs)
		curry: (curriedArgs...) ->
			@wrap (original,passedArgs) ->
				original.apply @, curriedArgs.concat(passedArgs)
		rcurry: (curriedArgs...) ->
			@wrap (original,passedArgs) ->
				original.apply @, passedArgs.concat(curriedArgs)
		not: ->
