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

Roman Cheplyaka <[email protected]>
Newsgroups gmane.comp.lang.haskell.libraries,gmane.comp.lang.haskell.cvs.ghc
Message-ID <20121014185329.GA8599@sniper>
+1 to this "r" version.

Roman

* Dan Burton <[email protected]> [2012-10-14 12:47:46-0600]
> At the risk of useless bikeshedding... might I suggest "r" as a
> mnemonic for "result"?
> 
> foldl :: (a -> r -> r) -> r -> [a] -> r
> foldr :: (r -> a -> r) -> r -> [a] -> r
> 
> -- Dan Burton
> 
> 
> On Sun, Oct 14, 2012 at 12:33 PM, Andreas Abel <[email protected]>wrote:
> 
> > +1 to all.
> >
> >
> > On 14.10.12 6:53 PM, Bas van Dijk wrote:
> >
> >> +1
> >>
> >> There are a few other functions in Data.List that could benefit from
> >> the same treatment:
> >>
> >> mapAccumL :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])
> >> mapAccumL :: (acc -> a -> (acc, b)) -> acc -> [a] -> (acc, [b])
> >>
> >> mapAccumR :: (acc -> x -> (acc, y)) -> acc -> [x] -> (acc, [y])
> >> mapAccumR :: (acc -> a -> (acc, b)) -> acc -> [a] -> (acc, [b])
> >>
> >> genericLength :: Num i => [b] -> i
> >> genericLength :: Num i => [a] -> i
> >>
> >> genericSplitAt :: Integral i => i -> [b] -> ([b], [b])
> >> genericSplitAt :: Integral i => i -> [a] -> ([a], [a])
> >>
> >> genericIndex :: Integral a => [b] -> a -> b
> >> genericIndex :: Integral i => [a] -> i -> a
> >>
> >> I'm not sure if we should change mapAccumL/R since 'a' and 'acc' are
> >> maybe too similar.
> >>
> >> Bas
> >>
> >> On 14 October 2012 16:28, Gábor Lehel <[email protected]> wrote:
> >>
> >>> Currently we have:
> >>>
> >>>      foldl :: (a -> b -> a) -> a -> [b] -> a
> >>>
> >>>      foldr :: (a -> b -> b) -> b -> [a] -> b
> >>>
> >>> I find this confusing. My brain doesn't do automatic alpha-renaming,
> >>> so I end up thinking that these types are very different because they
> >>> look very different. In fact, they are almost the same.
> >>> Embarrassingly, it took me longer than it took to understand monads,
> >>> GADTs, PolyKinds, and several other things before I realized it!
> >>>
> >>> So I propose that we use 'a' consistently to denote the type of the
> >>> list elements, and 'b' to denote the type of the result:
> >>>
> >>>      foldl :: (b -> a -> b) -> b -> [a] -> b
> >>>
> >>>      foldr :: (a -> b -> b) -> b -> [a] -> b
> >>>
> >>> making it obvious that the only difference is the order of parameters
> >>> to the accumulator.
> >>>
> >>> The total change would be to replace
> >>>
> >>>      Prelude.foldl :: (a -> b -> a) -> a -> [b] -> a
> >>>      Prelude.scanl :: (a -> b -> a) -> a -> [b] -> [a]
> >>>      Data.List.foldl' :: (a -> b -> a) -> a -> [b] -> a
> >>>      Data.Foldable.foldl :: (a -> b -> a) -> a -> t b -> a
> >>>      Data.Foldable.foldl' :: (a -> b -> a) -> a -> t b -> a
> >>>
> >>> with
> >>>
> >>>      Prelude.foldl :: (b -> a -> b) -> b -> [a] -> b
> >>>      Prelude.scanl :: (b -> a -> b) -> b -> [a] -> [b]
> >>>      Data.List.foldl' :: (b -> a -> b) -> b -> [a] -> b
> >>>      Data.Foldable.foldl :: (b -> a -> b) -> b -> t a -> b
> >>>      Data.Foldable.foldl' :: (b -> a -> b) -> b -> t a -> b
> >>>
> >>> I've attached a patch.
> >>>
> >>> Discussion period: 2 weeks
> >>>
> >>> Previously discussed at: http://www.reddit.com/r/**
> >>> haskell/comments/10q2ls/<http://www.reddit.com/r/haskell/comments/10q2ls/>
> >>>
> >>> --
> >>> Your ship was destroyed in a monadic eruption.
> >>>
> >>> ______________________________**_________________
> >>> Libraries mailing list
> >>> [email protected]
> >>> http://www.haskell.org/**mailman/listinfo/libraries<http://www.haskell.org/mailman/listinfo/libraries>
> >>>
> >>>
> >> ______________________________**_________________
> >> Libraries mailing list
> >> [email protected]
> >> http://www.haskell.org/**mailman/listinfo/libraries<http://www.haskell.org/mailman/listinfo/libraries>
> >>
> >>
> > --
> > Andreas Abel  <><      Du bist der geliebte Mensch.
> >
> > Theoretical Computer Science, University of Munich
> > Oettingenstr. 67, D-80538 Munich, GERMANY
> >
> > [email protected]
> > http://www2.tcs.ifi.lmu.de/~**abel/ <http://www2.tcs.ifi.lmu.de/~abel/>
> >
> > ______________________________**_________________
> > Libraries mailing list
> > [email protected]
> > http://www.haskell.org/**mailman/listinfo/libraries<http://www.haskell.org/mailman/listinfo/libraries>
> >

> _______________________________________________
> Libraries mailing list
> [email protected]
> http://www.haskell.org/mailman/listinfo/libraries
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.