[Haskell-beginners] some Data.Map questions

Dennis Raddle dennis.raddle at gmail.com
Fri Aug 19 08:40:21 CEST 2011


Hi David,
This helps, for sure. I wondered if any of the rich selection of
functions in Data.Map could be used, such as union. To perform a union
on two maps, their elements must have the same type. From this one
concludes that a type unifying Note's and PlayDirection's is
necessary, which is what you have done in Instruction.

On Thu, Aug 18, 2011 at 8:46 PM, David McBride <dmcbride at neondsl.com> wrote:
> Maybe something like this:
>
> instance Eq Loc where
>  a == b = ...
> instance Ord Loc where
>  compare a b = ...
>
> data Instruction = InstrNote (Loc, Note) | InstrPD (Loc, PlayDirection)
>
> write a function that will combine the notes and playdirections into
> one list of everything sequentially.
>
> combineNotesDirs :: [(Loc,Note)] -> [(Loc,PlayDirection)] -> [Instruction]
> combineNotesDirs [] [] = []
> combineNotesDirs [] (d:ds) = undefined --you can figure this out
> combineNotesDirs (n:ns) [] = undefined
> combineNotesDirs notes@(n:ns) dirs@(d:ds)
>  | fst d <= fst n = InstrPD d : (zipNotesDirs notes ds)
>  | otherwise      = InstrNote n : (zipNotesDirs ns dirs)
>
> Then loop over that and store them as a map.  Traverse the list, keep
> track of the playdirection at each entry, and then accumulate the
> current direction and note at each note entry into a new map.
>
> instructionlist2map :: [Instruction] -> Map Loc (Note, PlayDirection)
>
> I'm sure this could be cleaned up a bit, but is that sort of what you
> were looking for?
>



More information about the Beginners mailing list