
Kurt Hutchinson wrote:
On 2/2/06, Maurício
wrote: I understand those examples, but I really would like to know how to do that with monads. I would like to ask the same question, but now with this code:
double a = 1000; double b = 0; while (a != b) { a /= 2; cout << a; // Prints a cin << b; // User gives a number, stored in b };
An idiomatic approach: example :: Double -> Double -> IO () example a b | a == b = return () | otherwise = do let a' = a / 2 print a' b' <- readLn example a' b'
main = example 1000 0
Thanks! Robert's, Chris' and yours examples solved many of my questions. I understand I can insert modifications in IORefs (as used by Robert and Chris) inside the loop above: | otherwise = do let a' = a / 2 ... modifyIORef some_ioref some_function ... example a' b' I wonder if I could write a generic while based on your example: while :: (a -> IO a) -> (a -> Bool) -> IO () I'll probably learn something trying that. Best, Maurício