Splitting of vector-types (notes, voices) and aligned vector-types (events, scores) should be distinct.
The former is similar to take/drop (see also ^-^ and min).
The latter is a different operation, allowing either: separating a monoidal type into two components or removal and insertion of a span (not necessarily monoidal). Think about an infinite sequence: to move part of the value we need to insert or remove intermediate values.
Should compose nicely for note/voice and event/score.
Split a vector, generalization of take/drop:
split :: Duration -> d -> d
Split a behavior/score in 2 or 3, duals of switch and splice:
split2 :: Time -> d -> (d,d)
split3 :: Span -> d -> (d,d) -- cuts out a certain era and joins the surrounding
Splitting
^-^
andmin
).Split a vector, generalization of take/drop:
Split a behavior/score in 2 or 3, duals of switch and splice:
Compare: http://conal.net/blog/tag/segment