I have a Data.Map
structure that maps String
s to Strings
s. For whatever reason, I want to print the contents of the map in the format key: value
using foldrWithKey
, like so:
M.foldrWithKey (\k v b -> putStrLn (k++": "++v++"\n")) (return ()) data
However, only the first element of the map appears in the output (even though the map has more than one element). But when I try to construct a list using foldrWithKey
and then print it, all of the elements show up:
print (M.foldrWithKey (\k v b -> k:b) [] data)
So, why don't the other elemnts show up when trying to perform I/O? Is it the way foldr works or is there some subtle lazy-io-related quirk that I'm missing?