úÎ!„œ     Safe70 tempi·Musical tempo is represented as a data structure with three orthogonal components. (Generic instances are derived in order to allow later generation of instances for Aeson classes.)tempiThe W of a Tempo is the time at which the number of elapsed cycles/beats would have been 0.tempipGiven a Tempo and a clock time (UTCTime), timeToCount tells us how many cycles/beats have elapsed at that time.tempi}Given a Tempo and a count of elapsed cycles/beats, countToTime tells us when that "beat" will (or would have) take(n) place.tempi¤Provided a new frequency and a pivot time, changeTempo modifies a given Tempo as if the frequency changed at the pivot time, with the count continuing to increase  monotonically tempiYFor convenience, changeTempoNow is an IO action that changes the frequency of the tempo nowN, ie. at the time returned by a call to getCurrentTime embedded in the action. tempiÿ`Given a tempo, a window defined by two UTCTime-s, a metre (cycles of cycles), and an offset within that metre, findBeats returns all occurrences of the defined metric position within the window. The window is inclusive at the lower limit, and exclusive at the upper limit (so answers can occur exactly at the lower limit but not at the upper limit). tempiÿ=Given a metre and offset (eg. 2 and 0.5 to represent half-way through the first cycle of a metre lasting 2 cycles), and lower and upper limits in elapsed cycles, findBeats' returns all positions that match the given offset and metre and are greater than or equal to the lower limit, and lower than the upper limit. tempiÄGiven a metre, offset, and a lower limit in elapsed cycles, nextBeat returns the next position in cycles that matches the given offset and metre, and is greater than or equal to the lower limit.        $tempi-1.0.1.0-29u0BkQ3TPwEzmXPN5ql6u Data.TempoTempofreqtimecountorigin timeToCount countToTime changeTempochangeTempoNow findBeats findBeats'nextBeat $fEqTempo$fGenericTempo $fShowTempo