This doesn't really answer the "why" part of your question, but explains why you get [2, 1] instead of the reverse.
On Thursday, March 3, 2016, Niklas Hambüchen <
mail@nh2.me> wrote:
Does anybody know why for fromListWith, the arguments to the combining
function seem flipped?
> import Data.Map
> fromListWith (++) [('a',[1]),('a',[2])]
fromList [('a',[2,1])]
I often use it to group things by some key, e.g.
postsByUserId :: Map Int [Int]
postsByUserId =
fromListWith (++) [ (userId, [postId]) | (userId, postId) <- posts ]
and regularly get tricked by the postIds being reversed in the result.
This is especially unintuitive to me since:
> foldl (++) [] [[1],[2]]
[1,2]
> foldr (++) [] [[1],[2]]
[1,2]
Any ideas?
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe