Re: [Haskell-cafe] is the evaluation order deterministic when using applicative with IO

2012-03-16 Thread Brent Yorgey
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

Re: [Haskell-cafe] is the evaluation order deterministic when using applicative with IO

2012-03-16 Thread Ertugrul Söylemez
Rouan van Dalen 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 (getWrongWife >>= se

Re: [Haskell-cafe] is the evaluation order deterministic when using applicative with IO

2012-03-16 Thread Dmitry Olshansky
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 > Hi everyone. > > I was wondering if I can make assumptions about the evaluation order

Re: [Haskell-cafe] is the evaluation order deterministic when using applicative with IO

2012-03-16 Thread Twan van Laarhoven
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 :: In

[Haskell-cafe] is the evaluation order deterministic when using applicative with IO

2012-03-16 Thread Rouan van Dalen
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 {-