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