[Haskell-beginners] manipulating Map for music application

Dennis Raddle dennis.raddle at gmail.com
Sat Nov 7 06:07:47 UTC 2015


I have a Haskell program that computes music compositions. A composition
consists of sounds that happen at locations. A location is data type Loc.
At each location is a list of chords. A chord is data type Chord. Each
chord contains some chord-specific data and a list of notes. A note is data
type Note.

So we have

data Note = Note ...
data Chord = Chord ChordSpecificData [Note]
type Composition = Map Loc [Chord]

I would like to write a few different functions that operate over all the
notes.

The following function breaks out all the notes, tupling them with the
associated Locs and Chords:
compositionToList :: Composition -> [(Loc,Chord,Note)]

The following function transforms Notes, keeping only the Just results. If
a Chord gets all its notes eliminated, that Chord is removed. If a Loc has
all its Chords removed, that Loc is removed from the Map.
mapNotesMaybe :: (Loc -> Chord -> Note -> Maybe Note) -> Composition
   -> Composition

Any advice for concise code appreciated.
Dennis


What's a concise way of doing this?

Another useful function would be used for mapping

Dennis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20151106/8cca5ff6/attachment.html>


More information about the Beginners mailing list