module Tins::PartialApplication

def partial(*args)

_args_ as the already applied arguments.
Create a partial application of this Proc (or similar object) using
def partial(*args)
  if args.empty?
    dup
  elsif args.size > arity
    raise ArgumentError, "wrong number of arguments (#{args.size} for #{arity})"
  else
    f = lambda { |*b| call(*(args + b)) }
    f.instance_variable_set :@__arity__, arity - args.size
    f
  end
end