And no, your description of how it works in Smalltalk is wrong - #to:do: is implemented in the receiver (1).
In Spry we are calling an infix function named to:do: and the only real difference to Smalltalk in this case is the fact that the dispatch of to:do: is not polymorphic. But as I described in other comments I am working on polymorphic functions as a way to reach similar abstraction levels.