Proposal: Adding Kleisli composition to Control.Monad
Donald Bruce Stewart
dons at cse.unsw.edu.au
Sun Nov 12 22:27:12 EST 2006
ndmitchell:
> Hi
>
> >However, it was pointed out that repeatM is next to useless, and it is
> >traditional to use 'forever' for repeatM_ (see for example "Tackling the
> >Awkward Squad", and http://haskell.org/haskellwiki/Roll_your_own_IRC_bot
> >
> >That being said, repeatM_ isn't too bad, should people prefer it.
>
> If I had to guess what the monadic version of repeat was, I'd guess
> repeatM_ before forever. Forever is a very overloaded word, repeat in
> Haskell has exactly one concrete meaning agreed by everyone (since its
> in the Prelude).
Agreed. But 'forever' is a pretty special control structures, worthy of
a special name. Consider the cuteness of:
listen = forever $ do
h <- get
s <- io (hGetLine h)
io (putStrLn s)
if ping s then pong s
else eval (clean s)
versus:
listen = repeatM_ $ do
h <- get
s <- io (hGetLine h)
io (putStrLn s)
if ping s then pong s
else eval (clean s)
Or, to quote the awkward squad, s2.4 "Control structures":
> We can easily express an infinite loop as a combinator:
>
> forever :: IO () -> IO ()
> forever a = a >> forever a
I'm we're going to use this forever more, then a name more meaningful
than repeatM_ might be appropriate (personally, I have to check every
time whether it is replicate or repeat that is :: Int -> a -> [a]).
-- Don
More information about the Libraries
mailing list