span, break can be used in MIDI.Read for searchNoteOff, moveTempoToHead Haddock documentation for functions monotony check on AbsoluteEventList length take, drop, splitAt takeTime, dropTime, splitAtTime There are too many variants, e.g. with respect to inclusion and exclusion of the pivot element. I do not know, which ones are needed, and how to name them. I'll wait for the first usage. They should be somehow consistent with takeWhile, dropWhile, span Relative.TimeMixed: better names for appendBodyEnd prependBodyEnd !! can be done with getBodies, getTimes segmentBefore, segmentAfter AlternatingList's laziness should be more fine-grained. The underlying list-of-pair structure still leaks. You can observe it when applying 'mapInit' functions. alternative data structure may save us from so many variants of the same function data TimeHeadList end time body = End end | Cont time (BodyHeadList end time body) data BodyHeadList end time body = End end | Cont body (TimeHeadList end time body) data TimeEnd time = TimeEnd time data BodyEnd body = BodyEnd body In 'TimeHeadList end time body', 'end' must be either 'TimeEnd time' or 'BodyEnd body'. However, can a generic 'consTime' assert, that the end time type matches the head time type? How can 'fmap' still work? == done == zipWith distinction between AbsoluteList and RelativeList with a newtype? seems to be sensible but requires more wrapping Shall we only wrap the 'time' value? This way we could share types between modules. This way we could not simply define an Arbitrary instance for Absolute EventLists.