module Pattern where import Pitch import Midi import List import Prelude ( Int, (*), ($) ) main, voice :: [Event (Channel Message)] ; main :: [Event (Channel Message)] main = [Event (Channel Message)] voice ; en, qn, hn :: Time ; en :: Time en = Time 200 ; qn :: Time qn = Time 2 Time -> Time -> Time forall a. Num a => a -> a -> a * Time en ; hn :: Time hn = Time 2 Time -> Time -> Time forall a. Num a => a -> a -> a * Time qn ; harmonies :: [[Pitch]] ; harmonies :: [[Time]] harmonies = [ Time -> Time c Time 4, Time -> Time e Time 4, Time -> Time g Time 4, Time -> Time c Time 5 ] [Time] -> [[Time]] -> [[Time]] forall a. a -> [a] -> [a] : [ Time -> Time d Time 4, Time -> Time f Time 4, Time -> Time a Time 4, Time -> Time c Time 5 ] [Time] -> [[Time]] -> [[Time]] forall a. a -> [a] -> [a] : [ Time -> Time b Time 3, Time -> Time d Time 4, Time -> Time g Time 4, Time -> Time b Time 4 ] [Time] -> [[Time]] -> [[Time]] forall a. a -> [a] -> [a] : [ Time -> Time c Time 4, Time -> Time e Time 4, Time -> Time g Time 4, Time -> Time c Time 5 ] [Time] -> [[Time]] -> [[Time]] forall a. a -> [a] -> [a] : []; pattern :: [ Int ] ; pattern :: [Int] pattern = [Int 0, Int 1, Int 2, Int 1, Int 2, Int 3, Int 2, Int 1] ; voice :: [Event (Channel Message)] voice = Time -> [Event Message] -> [Event (Channel Message)] forall a. Time -> [Event a] -> [Event (Channel a)] channel Time 0 (Time -> [Event Message] program Time 0 [Event Message] -> [Event Message] -> [Event Message] forall a. [a] -> [a] -> [a] ++ (Time -> [Event Message]) -> [Time] -> [Event Message] forall a b. (a -> [b]) -> [a] -> [b] concatMap ( Time -> Time -> [Event Message] note Time en ) ( ([Time] -> Int -> Time) -> [[Time]] -> [Int] -> [Time] forall a b c. (a -> b -> c) -> [a] -> [b] -> [c] zipWith [Time] -> Int -> Time forall a. [a] -> Int -> a index ( ([Time] -> [[Time]]) -> [[Time]] -> [[Time]] forall a b. (a -> [b]) -> [a] -> [b] concatMap ( Int -> [Time] -> [[Time]] forall a. Int -> a -> [a] replicate Int 8 ) ([[Time]] -> [[Time]]) -> [[Time]] -> [[Time]] forall a b. (a -> b) -> a -> b $ [[Time]] -> [[Time]] forall a. [a] -> [a] cycle [[Time]] harmonies ) ( [Int] -> [Int] forall a. [a] -> [a] cycle [Int] pattern ) ) ) ; index :: [a] -> Int -> a ; index :: forall a. [a] -> Int -> a index [a] xs Int n = [a] xs [a] -> Int -> a forall a. [a] -> Int -> a !! Int n ;