It occurred to me that the predicate will generally be a monadic function itself, so here's a refined version:
:: Monad m => (a -> m Bool) -> (a -> m a) -> a -> m a untilM pred f x = do c <- pred x if c then return x else f x >>= untilM pred f Think of a computation in the State monad, a predicate will probably want to consult that state. Matthew Cox ----- Original Message ----- From: Matthew Cox To: <haskell-cafe@haskell.org> Sent: Sat, 19 May 2007 13:10:40 -0600 Subject: Re: [Haskell-cafe] Pesky monads... You can define one: untilM :: Monad m => (a -> Bool) -> (a -> m a) -> a -> m a untilM pred f x | pred x = return x | otherwise = f x >>= untilM pred f Matthew Cox ----- Original Message ----- From: Andrew Coppin To: haskell-cafe@haskell.org Sent: Sat, 19 May 2007 19:49:40 +0100 Subject: [Haskell-cafe] Pesky monads... I've been getting some pretty weird complaints from the type checker. And I just figured out why! Grr... Is there any function that does the same thing as "until", but in a monad? _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe