    module Sound.MIDI.Example.ControllerRamp {- Main -} where

    import qualified Sound.MIDI.File      as MidiFile
    import qualified Sound.MIDI.File.Save as Save

    -- import qualified Sound.MIDI.File.Event.Meta as MetaEvent
    import qualified Sound.MIDI.File.Event      as Event

    import qualified Sound.MIDI.Message.Channel       as ChannelMsg
    import qualified Sound.MIDI.Message.Channel.Voice as VoiceMsg

    -- import qualified Sound.MIDI.Parser.Report as Report

    import qualified Data.EventList.Relative.TimeBody as EventList
    -- import Data.EventList.Relative.MixedBody ((/.), (./), )

    import qualified Data.ByteString.Lazy as B

    -- import qualified Numeric.NonNegative.Wrapper as NonNeg

    example :: MidiFile.T
    example =
       let chan = ChannelMsg.toChannel 0
       in  MidiFile.Cons MidiFile.Parallel (MidiFile.Ticks 10)
              [EventList.fromPairList $
               map (\x -> (50, Event.MIDIEvent (ChannelMsg.Cons chan (ChannelMsg.Voice (VoiceMsg.Control VoiceMsg.mainVolume x)))))
                   [0..127]]

    main :: IO ()
    main =
       B.writeFile "controller-ramp.mid"
          (Save.toByteString example)