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.