I've added the ABC code from Mullein, though quite a lot is stubbed out at the moment. I've also added bifunctor and ternary (?) functor classes to help manipulate notes (parameteric on annotation, pitch and duration).
class FMap2 f where
fmap2 :: (a -> u) -> (b -> v) -> f a b -> f u v
class FMap3 f where
fmap3 :: (a -> u) -> (b -> v) -> (c -> w) -> f a b c -> f u v w
fmap2a :: FMap2 f => (a -> u) -> f a b -> f u b
fmap2a f = fmap2 f id
fmap3a :: FMap3 f => (a -> u) -> f a b c -> f u b c
fmap3a f = fmap3 f id id
fmap3b :: FMap3 f => (b -> v) -> f a b c -> f a v c
fmap3b g = fmap3 id g id