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
{-
On 16/03/12 10:45, Rouan van Dalen wrote:
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 -
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
Rouan van Dalen rvda...@yahoo.co.uk wrote:
I was wondering if I can make assumptions about the evaluation order
of the following code:
Nitpick: This is execution order, not evaluation order. The evaluation
order is indeed undefined here.
Greets,
Ertugrul
--
nightmare = unsafePerformIO
On Fri, Mar 16, 2012 at 12:30:13PM +0100, Twan van Laarhoven wrote:
If you want to avoid the side effects of boolTest2 when boolTest1
returns true, you will need to implement a monadic or, something like
orM ma mb = do
a - ma
if a then return True else mb
Note also