As usual you can check:

Prelude Control.Applicative> pure (||) <*> pure True <*> undefined
*** Exception: Prelude.undefined

Prelude Control.Applicative> (||) True undefined
True



2012/3/16 Rouan van Dalen <rvda...@yahoo.co.uk>

> 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.
>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to