[2] It is only possible to create a recursor like find- musical- object- onset directly, by supplying an iterator like find- element- onset with itself as functional argument, when the argument order of the predicate expected by find- element- onset (object followed by onset), is the same as the argument order of find- musical- object- onset itself.
[3] We warned against the use of extensive shadowing which makes code hard to understand. But its use is quite harmless in cases like these, where one method is needed to catch a very specific case, and all other cases can be treated in the same way.
[4] However, later we will show how the language can be extended on a meta level to program these restrictions ourselves
[5] The window facility that supported the view- draw- contents method, which inherits directly from the piano- roll- window class, could have been conceptualised as a neat mixin as well. We leave this as an exercise to the reader. But as a last refinement, because we foresee many more window mixins to be defined, we will have them all inherit from one class which can capture behavior common to all of them.
[6] This is one of the main arguments one might have agains much over-enthousiastic hype on the claim that object oriented code is reusable: code is never reusable in itself without an enourmous amount of thinking, and rewriting code to evolve it into something more general and reusable is still often needed.
[7] A simple exception like this can have quite some consequences for the structure of the program. It is part of the art of programming (and of the stamina of the programmer in trying out different alternatives) to pick the best, least intrusive, solution out of the myriad ways in which these exceptions can be handled.
[8] All to often we see gory details of screen and window systems (e.g. the fact that their vertical axis increases downward) percolate into programs which would be much better of when one small interface between screen and domain takes care of translations, and all calculations can be done in terms of the aplication domain.