
David F. Place wrote:
Interesting, but what if 'p' is also a monadic action? For instance, it might access the state of the State monad which 'f' is updating.
Then I'd stop trying to do it as a one-liner, I suspect: let untilM p f x = do cond <- p x if cond then return x else do y <- f x untilM p f y
On Mar 21, 2007, at 5:31 AM, Jules Bean wrote:
..but here 'f' is a pure function, not a monadic action. If you want f to be a monadic action then you want:
*Main> :t let untilM p f x = if p x then return x else untilM p f =<< f x in untilM let untilM p f x = if p x then return x else untilM p f =<< f x in untilM :: (Monad m) => (a -> Bool) -> (a -> m a) -> a -> m a
___________________ (---o-------o-o-o---o-o-o----( David F. Place mailto:d@vidplace.com