I use them a lot... just because "select:thenCollect:" looks clearer to me than "(select:)collect:", and I can indent the code in a more fashion way to me. Of course, if you choose remove it, I can change my code without any problem (it is not so hard, after all :) ), but I just wanted to point that optimization is not always the reason because a protocol can be added... some times, is gramatics too.
The following rewriter changes your code automatically. We use it as part of Slime to ensure portability. ParseTreeRewriter new replace: '``@collection collect: ``@block1 thenDo: ``@block2' with: '(``@collection collect: ``@block1) do: ``@block2'; replace: '``@collection collect: ``@block1 thenSelect: ``@block2' with: '(``@collection collect: ``@block1) select: ``@block2'; replace: '``@collection reject: ``@block1 thenDo: ``@block2' with: '(``@collection reject: ``@block1) do: ``@block2'; replace: '``@collection select: ``@block1 thenCollect: ``@block2' with: '(``@collection select: ``@block1) collect: ``@block2'; replace: '``@collection select: ``@block1 thenDo: ``@block2' with: '(``@collection select: ``@block1) do: ``@block2' Lukas -- Lukas Renggli http://www.lukas-renggli.ch