
16 Mar
2012
16 Mar
'12
5:45 a.m.
Hi everyone. I was wondering if I can make assumptions about the evaluation order of the following code: isTrue :: Int -> IO Bool isTrue val = pure (||) <*> boolTest1 val <*> boolTest2 val {- boolTest1 is an inexpensive, quick check -} boolTest1 :: Int -> IO Bool boolTest1 val = undefined {- boolTest2 is a very expensive check -} boolTest2 :: Int -> IO Bool boolTest2 val = undefined When using Applicative in the isTrue function, I would like to make use of the short-circuit behaviour of || and rely on the fact that the boolTest1 will be executed first. The reason I am asking is because the boolTest functions are in the IO monad, instead of just returning pure Bool values. Regards Rouan.