m@(Method traits) ** n@(Method traits) "Answers a new Method whose effect is that of calling the first method on the results of the second method applied to whatever arguments are passed. This composition is associative, i.e. (a ** b) ** c = a ** (b ** c). When the second method, n, does not take a *rest option or the first takes more than one input, then the output is chunked into groups for its consumption. E.g.: #; `er ** #; `er applyTo: {'a'. 'b'. 'c'. 'd'} => 'abcd' #; `er ** #name `er applyTo: {#a. #/}. => 'a/'" [ n acceptsAdditionalArguments \/ [m arity = 1] ifTrue: [[| *args | m applyTo: {n applyTo: args}]] ifFalse: [[| *args | m applyTo: ([| :stream | args do: [| *each | stream nextPut: (n applyTo: each)] inGroupsOf: n arity] writingAs: {})]] ]. #**`er asMethod: #compose: on: {Method traits. Method traits}.