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.