
David Place
fromAmbList :: Ord k => [(k, a)] -> Map k [a] fromAmbList = M.fromListWith (++) . map (second pure)
If I am reading your code, I may look up second and find it in Control.Arrow. I have to learn about Arrows to understand your code? And pure makes me need to study the Applicative class. I imagine that it is likely that second is the only thing from Control.Arrow that you are using and pure is the only thing from Control.Applicative. So, you need two lines of extra code to express what could be expressed much more perspicuously as:
Point taken, but to get serious with Haskell you will want to learn applicative functors and at least the function arrow anyway. This is the solution I would have written, and which would be most readable to me, and there is a practical reason for that: I have trained myself to write my code as composable as possible, hence such code is very easy to read for me, and I don't really think about it when writing. Similar comparison: Why would you want to learn a sophisticated language like Haskell with a steep learning curve together with the hassle of setting up a compilation environment on both the development and production systems and a specialized web server configuration, if you could just use PHP, which is preinstalled almost everywhere anyway? Why would you want to use a complicated mechanism like exceptions, if you could just as well just return an error value? Greets, Ertugrul -- nightmare = unsafePerformIO (getWrongWife >>= sex) http://ertes.de/