[Haskell-beginners] cleanest way to unwrap a list?

Jack Henahan jhenahan at uvm.edu
Tue Aug 14 00:21:02 CEST 2012


Another vote for 

    map (map (+1)) [[1,2],[2,3]]

though I rather prefer

    (map . map) (+1) [[1,2],[2,3]]

or even

    (map . map) (+1) $ [[1,2],[2,3]]

====
Jack Henahan
jhenahan at uvm.edu


On Aug 13, 2012, at 1:21 AM, Christopher Howard <christopher.howard at frigidcode.com> wrote:

> Hi. Is the some generic, clean syntax to unwrap a nested list, modify
> the value, and put it back together? Say, for example, I have the list
> [[1,2],[3,4]] and want to add 1 to each inner element, resulting in
> [[2,3],[4,5]].
> 
> After reading about the list monad, I was rather excited, because I
> (mistakenly) thought something like this would work:
> 
> code:
> --------
> a = do b <- [[1,2],[3,4]]
>       c <- b
>       return (c + 1)
> --------
> 
> That would be awesome, because I would be able to modify the list at
> each level of unwrapping, while leaving the code very neat and readable.
> However, what the above example actually does is produce a /single/ list
> from the values:
> 
> code:
> --------
> *Main> a
> [2,3,4,5]
> --------
> 
> Obviously wishing won't change how the list monad works, but I thought
> it might be worth asking if there is some other monad or syntactic trick
> that does something along the lines of what I am looking for.
> 
> -- 
> frigidcode.com
> indicium.us
> 
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners




More information about the Beginners mailing list