Christoph wrote:


> a = lambda {|x,|  x   }
> b = lambda {|y,|  y }
> 
> c = b * a
> p  a.arity, c.arity   # 1, -1

OK, I see your point.

> ---
> k =    35
> a = lambda {|x,y|    [k + 2 * x, k +  3 * x]  }
> b = lambda {|t,s|    t + s    }
> 
> c = b * c
> 
> c[1,1]  = = 75  # true
> ---

I don't understand your example. I guess, you wanted to
write
c = b*a
but what do you expect to be the result of the composition
of a two variable function and a two variable function?
A two variable function returning a one variable function?
But this does not match your example...
Perhaps you wanted to write c[1,1][k] == 75 ?

> - this should work with essentially all  in and out going
> arities.  Of course one can do it but it is more tedious
> then you might think (which was my sole point) .

OK, I admit that in this generality it is not so simple in
Ruby as in (***)ML.

Now, let us be honest, is it so important? I do a lot of
meta-programming, but I have never encountered a situation
requiring such a high level approach.

Regards, Christian