[Haskell-cafe] dynamic code compilation and loading

Dennis Raddle dennis.raddle at gmail.com
Sun Jan 15 20:37:37 UTC 2017

I wrote a Haskell program which reads a MusicXML score and plays it through
real-time MIDI messages (using the portmidi module) via some algorithms
that are customized depending on the MIDI synthesizer that is receiving the
messages. The program also plays back the music with musically expressive

In the next version of this program, I am going to add more complicated
algorithms for the expressive nuances, and it would be helpful to configure
them and express them in actual Haskell code. My workflow will look like

A. write a score using the music typesetting program Sibelius

B. write some Haskell code to provide expressive nuances

C. play the music through a MIDI synthesizer and listen.

D. based on what I hear and where I want to take the music, modify the
score and the Haskell code

E. loop back to C

Therefore, if I don't want to recompile the program each time I do step D,
I need to compile and load code dynamically.

Let's say that a data structure which contains a MusicXML score and a
nominal rendition into MIDI messages together with time tags is of type
Score. Then I want to write, and dynamically compile/load, a function

vary :: Score -> Score

which varies the MIDI messages and time tags to add expressive nuances.

Let's say 'vary' is contained in Vary.hs.

I want to write 'vary' in terms of already-compiled functions that provide
the basic music-processing operations. Let's say that these functions are
in the module MusicBase. Then Vary.hs will look like

import MusicBase

vary = ... operations in MusicBase ...

Can I get some basic idea of how to do this?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20170115/3d4061fb/attachment.html>

More information about the Haskell-Cafe mailing list