On 11/5/07, Alex Young <[EMAIL PROTECTED]> wrote: > > randList :: Int -> [IO Int] > randList n = randListTail [] n > > randPairs :: Int -> [(IO Int, IO Int)] > randPairs n = zip (randList n) (randList n) [snip] > > doCountPair :: (IO Int, IO Int) -> IO Int > doCountPair (a, b) = do > x <- a > y <- b > return (pairIsInside x y) > > fSumListTail :: Int -> [(IO Int, IO Int)] -> IO Int > fSumListTail total [] = do > return total > fSumListTail total (x:xs) = do > y <- doCountPair x > fSumListTail (total+y) xs > > fSumList :: [(IO Int, IO Int)] -> IO Int > fSumList l = fSumListTail 0 l >
It's unusual to return a list of IO actions or to take a list of pairs of IO actions as an argument. You should think about whether there's a reason you're doing this. For example, why not rewrite randList as: randList :: Int -> IO [Int] randList n = sequence $ randListTail [] n (for example)? > piAsDouble :: Int -> Int -> Double > piAsDouble a b = > (fromInteger (toInteger a)) / (fromInteger (toInteger b)) > This can be rewritten as: fromIntegral a / fromIntegral b (I think -- not tested. The above isn't tested either.) Those are just a couple things that jump out at me. fSumListTail looks like it should be expressible using a foldM as well. In fact, fSumListTail looks like it ought to be a pure function. Think about how you can isolate the parts of the code that do IO so that most functions are pure. Cheers, Tim -- Tim Chevalier * catamorphism.org * Often in error, never in doubt "Faith, faith is an island in the setting sun / But proof, yes, proof is the bottom line for everyone."--Paul Simon _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
