Ooops forgot that Chords are not just lists of Notes :mapNotesMaybe f compo = mapMaybeWithKey go compowheregogo loc chord@(Chord d notes) = fmap (Chord d) . mconcat . map (fmap (:[]) . f loc chord) $ notes
go loc chords = mconcat . map (fmap (:[]) . gogo loc) $ chordsLe sam. 7 nov. 2015 à 18:41, Chaddaï Fouché <chaddai.fouche@gmail.com> a écrit :So :mapNotesMaybe :: (Loc -> Chord -> Note -> Maybe Note) -> Composition -> CompositionmapNotesMaybe f compo = mapMaybeWithKey go compowhere
go loc chords = mconcat . map (gogo loc) $ chordsgogo loc chord = mconcat . map (fmap pure . f loc chord) $ chordThis should work.
--ChaddaïLe sam. 7 nov. 2015 à 07:07, Dennis Raddle <dennis.raddle@gmail.com> a écrit :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 havedata 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-> CompositionAny advice for concise code appreciated.DennisWhat's a concise way of doing this?Another useful function would be used for mappingDennis
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners