Portability | non-portable (TF,GNTD) |
---|---|
Stability | experimental |
Maintainer | hans@hanshoglund.se |
Safe Haskell | None |
Provides the Voice
type.
Documentation
A voice is a list of events with explicit duration. Events can not overlap.
Voice is a Monoid
under sequential composition. mempty
is the empty part and mappend
appends parts.
Voice has an Applicative
instance derived from the Monad
instance.
Voice is a Monad
. return
creates a part containing a single value of duration
one, and >>=
transforms the values of a part, allowing the addition and
removal of values under relative duration. Perhaps more intuitively, join
scales
each inner part to the duration of the outer part, then removes the
intermediate structure.
let p = Voice [(1, Just 0), (2, Just 1)] :: Voice Int p >>= \x -> Voice [ (1, Just $ toEnum $ x+65), (3, Just $ toEnum $ x+97) ] :: Voice Char ===> Voice {getVoice = [ (1 % 1,Just 'A'), (3 % 1,Just 'a'), (2 % 1,Just 'B'), (6 % 1,Just 'b') ]}
Voice is a VectorSpace
using sequential composition as addition, and time scaling
as scalar multiplication.
Monad Voice | |
Functor Voice | |
Applicative Voice | |
Foldable Voice | |
Pointed Voice | |
Stretchable Voice | |
Performable Voice | |
HasDuration Voice | |
Eq a => Eq (Voice a) | |
Ord a => Ord (Voice a) | |
Show a => Show (Voice a) | |
Monoid (Voice a) | |
IsDynamics a => IsDynamics (Voice a) | |
IsPitch a => IsPitch (Voice a) | |
Semigroup (Voice a) |