 				fn = funcTable[arguments.length]
 				return undefined unless fn? and fn instanceof Function
 				fn.apply @, arguments
-	}
 
 	Function.extend 'concat', Function.concatenate
 



	# instance methods
	Function.implement {
		toFunction: -> @
		bind: (scope, args...) ->
			self = @curry args
			-> self.apply scope, arguments
		wrap: (fn,bind) ->
			self = @
			wrapper = ->
				args = Array::slice.call arguments
				fn.call @, (if bind? then self.bind bind else self), args
			wrapper._origin = @
			wrapper

					# 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: ->
