[Haskell-beginners] Why this order of parameters
hanche at math.ntnu.no
Thu Nov 12 20:45:37 UTC 2015
Hmmm, I seem to have missed part of this conversation, but I’ll toss in my two cents anyhow:
Consider the identities
foldl (•) s [x,y,z] == ((s•x)•y)•z
foldr (•) s [x,y,z] == x•(y•(z•s))
and I think it should be clear that the type of (•) must be a→b→a in the former and b→a→a in the latter.
Either of these identities would look rather odd when written in operator notation if (•) were flipped!
From: Martin Vlk <martin at vlkk.cz>
Date: 12 November 2015 at 18:49:35
> I think again this technically doesn't matter...
> I'm curious if this could be for the sake of making the types of the two
> functions (foldr/foldl) different? E.g. so that you can tell from the
> type what function it is.
> (I'm a Haskell beginner myself so would be curious to hear an expert's
> voice on this!)
> > foldl :: (a -> b -> a) -> a -> [b] -> a
> > foldr :: (a -> b -> b) -> b -> [a] -> b
> > For once the list is a list of as in foldl, but a list of as in foldr. Now that can be fixed
> with renaming the type
> > parameters
> > foldr :: (b -> a -> a) -> a -> [b] -> a
> > this is the exact same thing and resembles more the type of foldl. But still the function
> argument has its parameters
> > flipped. foldl's function takes the list element as second parameter and foldr's takes
> it as first parameter.
> > Why is that so?
> Beginners mailing list
> Beginners at haskell.org
Institutt for matematiske fag
Norges teknisk-naturvitenskapelige universitet
More information about the Beginners