module Chord where import Midi import Pitch ( Pitch ) chord :: Time -> [Pitch] -> [Midi.Event Midi.Message] ; chord :: Pitch -> [Pitch] -> [Event Message] chord Pitch dur = [[Event Message]] -> [Event Message] forall a. [[Event a]] -> [Event a] mergeMany ([[Event Message]] -> [Event Message]) -> ([Pitch] -> [[Event Message]]) -> [Pitch] -> [Event Message] forall b c a. (b -> c) -> (a -> b) -> a -> c . (Pitch -> [Event Message]) -> [Pitch] -> [[Event Message]] forall a b. (a -> b) -> [a] -> [b] map (Pitch -> Pitch -> [Event Message] note Pitch dur) ; chord3 :: Time -> Pitch -> Pitch -> Pitch -> [Midi.Event Midi.Message] ; chord3 :: Pitch -> Pitch -> Pitch -> Pitch -> [Event Message] chord3 Pitch dur Pitch p0 Pitch p1 Pitch p2 = Pitch -> [Pitch] -> [Event Message] chord Pitch dur [Pitch p0, Pitch p1, Pitch p2] ; chord4 :: Time -> Pitch -> Pitch -> Pitch -> Pitch -> [Midi.Event Midi.Message] ; chord4 :: Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message] chord4 Pitch dur Pitch p0 Pitch p1 Pitch p2 Pitch p3 = Pitch -> [Pitch] -> [Event Message] chord Pitch dur [Pitch p0, Pitch p1, Pitch p2, Pitch p3] ; major, major7, minor, minor7 :: Time -> Pitch -> [Midi.Event Midi.Message] ; major :: Pitch -> Pitch -> [Event Message] major Pitch dur Pitch base = Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message] chord4 Pitch dur Pitch base (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 4) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 7) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 12) ; major7 :: Pitch -> Pitch -> [Event Message] major7 Pitch dur Pitch base = Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message] chord4 Pitch dur Pitch base (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 4) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 7) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 10) ; minor :: Pitch -> Pitch -> [Event Message] minor Pitch dur Pitch base = Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message] chord4 Pitch dur Pitch base (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 3) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 7) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 12) ; minor7 :: Pitch -> Pitch -> [Event Message] minor7 Pitch dur Pitch base = Pitch -> Pitch -> Pitch -> Pitch -> Pitch -> [Event Message] chord4 Pitch dur Pitch base (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 3) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 7) (Pitch base Pitch -> Pitch -> Pitch forall a. Num a => a -> a -> a + Pitch 10) ;