
Michael Mossey wrote:
I'm translating a Python program into Haskell, and running into a problem---a type of code where I don't know how to make the conceptual shift.
The Python code does a graphical layout of a music score. There is a loop in which it add items (chords, symbols, text, etc.) one at a time, moving to the right, until it reaches the end of the line. So in typical imperative code, we have a bunch of loop state, such as
- xpos of last chord or symbol placed - time of last chord or symbol placed - several StaffData objects, each containing the symbols that went on that particular staff - a cache of miscellaneous information about each symbol for later reference
So imperative code is pretty simple: loop, and each time update the state. Much of this state consists of lists to which symbols are added once per loop.
Can you elaborate on what exactly the algorithm is doing? Does it just emit notes/chords/symbols at given positions or does it also try to arrange them nicely? And most importantly, "where" does it emit them to, i.e. what's the resulting data structure? So far, the problem looks like a basic fold to me. Regards, apfelmus -- http://apfelmus.nfshost.com