
Hey, I have nothing against bikeshedding contributions :) For now I don't want to break backwards compatibility with renames, but if more idomatic things like forM_ [1..n] keep not being optimised as well and more people start using loop as a package, agreeing on a set of names that people find nicest would be good. Maybe you can put your suggestion into a github issue, so that we don't forget about them? On 20/07/14 07:26, wren romano wrote:
How do you feel about bikeshedding contributions? The following seems more idiomatic to me:
-- Formerly @forLoopFold@. This is the primitive notion, so it should have the simplest name. loop :: a -> (a -> Bool) -> (a -> a) -> b -> (b -> a -> b) -> b
-- This one is new. We want to implement it directly instead of using 'loop' for the same reasons that we want to implement 'loopM_' directly. loopM :: Monad m => a -> (a -> Bool) -> (a -> a) -> b -> (b -> a -> m b) -> m b
-- Formerly @forLoop@ loopM_ :: Monad m => a -> (a -> Bool) -> (a -> a) -> (a -> m ()) -> m ()
loopFromTo :: (Eq a, Enum a) => a -> a -> b -> (b -> a -> b) -> b loopFromTo start stop = loop start (stop ==) succ
loopNumFromTo :: (Eq a, Num a) => a -> a -> b -> (b -> a -> b) -> b loopNumFromTo start stop = loop start (stop ==) (1+)
loopFromToM :: (Eq a, Enum a) => a -> a -> b -> (b -> a -> m b) -> m b loopFromToM start stop = loopM start (stop ==) succ
loopNumFromToM :: (Eq a, Num a) => a -> a -> b -> (b -> a -> m b) -> m b loopNumFromToM start stop = loopM start (stop ==) (1+)
loopFromToM_ :: (Eq a, Enum a) => a -> a -> (a -> m ()) -> m () loopFromToM_ start stop = loopM_ start (stop ==) succ
loopNumFromToM_ :: (Eq a, Num a) => a -> a -> (a -> m ()) -> m () loopNumFromToM_ start stop = loopM_ start (stop ==) (1+)
the loopNum* names are pretty arbitrary/crappy, but using the *FromTo, *M, and *M_ names is far more idiomatic.