"Christoph" wrote .... > > class A; end > class AA < A; end > class AAA < AA; end > > class B ; end > class BB < B; end > class BBB < BB; end > > > # 1 > def m(A x, B y; ) > .. > end > > # 2 > def m( AA x, B y; ) > ... > end > > # 3 > def m( A x, BB y; ) > ... > end > > a = AAA.new > b = BBB.new > > > m(a , b) Ups - following the logic of my silly overload convention (probably a nightmare for the parser) this should have been m(a,b; ) Personally I would very much prefer something completely orthogonal like <(a,b)>.m() or multi(a,b).m() > # possible Specializations are 1,2,3 > > # maximal possible specializations are 2,3 > > # lexicographic largest among maximal > # specializations is 2 > /Christoph