Proposal: alpha-rename the type signatures of foldl, foldl', and scanl to be consistent with foldr and scanr

Henning Thielemann lemming at
Mon Oct 15 19:00:40 CEST 2012

I like to add that if you define a class for structures and according 
element types that support both foldl and foldr, and you are not using the 
RMonad trick, then the name of the types really matter:

class Foldable v a b where
    foldl :: (a -> b -> a) -> a -> v b -> a
    foldr :: (a -> b -> b) -> b -> v a -> b

The accumulator type would not need to be storable in the structure 'v' 
but if the Fold class uses the variable names from the Prelude then both 
accumulator and element type are constrained.

I think the accumulator should not be named 'r' because there are many 
result types in the List module that are not named 'r' and should not be, 
for instance because argument and result have the same type or are just 
Int or Bool. The distinguishing feature of a result type is that it is the 
last type in a chain of arrows, but you can hardly express this using the 
variable name.

More information about the Libraries mailing list