You can't write a single such function to operate on all the different types, but you can use Conal's semantic editor combinators.

In the case of something to map onto the elements of a list of lists, you'd want (map . map), or (fmap . fmap) to generalise things slightly.

In the case of lists of lists of lists, you need (fmap . fmap . fmap).

Note that you can generalise this to for example applying to the elements of lists which are embedded in the first element of a tuple:  first . fmap.

Or a list of Maybe tuples containing lists in their second element: fmap . fmap . fmap . fmap

Bob

On 8 Apr 2010, at 14:16, matthew coolbeth wrote:

I'm a beginner too but, if I am not wrong, then you will not be able to write a function that can receive input of type [[a]] as well as input of type [[[a]]].

Is that the behaviour that you have in mind?

On Thu, Apr 8, 2010 at 09:08, Ben Derrett <ben.derrett@googlemail.com> wrote:
Hi,
I'm trying to write a generalization of the map function that operates on nested lists, e.g. [[a]] or [[[a]]]. (It should map all elements of type a (not list) with f)

I was thinking of something along these lines:
mapN f *list of type [a] (where a is not a list type)* = map f l
mapN f l = (mapN f (head l)):(mapN f (tail l))

Any suggestions about how to go about this?

Many thanks,

Ben


--
Ben Derrett
Department of Mathematics
MIT Class of 2012
bderrett@mit.edu

_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners




--
mac
_______________________________________________
Beginners mailing list
Beginners@haskell.org
http://www.haskell.org/mailman/listinfo/beginners