Provisional work on stretch, reverse and chains.
I've now decided that instances for Stretch and SReverse must be account for their answer type, i.e. this is no longer warranted:
instance SReverse ans => SReverse (EventList u ans) where
instead an instances must written for all answers:
instance SReverse (EventList u ()) where
This leads to a moderate code explosion but some useful answers are not reversible with SReverse instead the need to account for their delta from the time 0. This is because geometrically SReverse would be a translation of the basis to start at 0, a reflection, and traslation back to the original start point from 0.
Chains are not looking a very promising abstraction for music (whereas they have a purpose for graphics). A Chain is a finite walk over an infinite path - the ChainScheme. This makes them the wrong mechanism to model a metronome for instance - a metronome should be an infinite series of events which is evaluated within a fixed time window to make a finite event list.