[Haskell-cafe] How to make boolean logic with IO Monad more expressive?

Jack Kelly jack at jackkelly.name
Mon May 27 09:37:37 UTC 2019


Viktor Dukhovni <ietf-dane at dukhovni.org> writes:

>> On May 27, 2019, at 1:07 AM, Magicloud Magiclouds <magicloud.magiclouds at gmail.com> wrote:
>> 
>> ```
>> status <- ioOperation -- IO-ed anyway
>> return $ pureComputing || (status && pure2)
>> ```
>
> With two helpers:
>
>   (<&&>) :: IO Bool -> IO Bool -> IO Bool
>   (<&&>) ma mb = ma >>= (\a -> if not a then return False else mb)
>
>   (<||>) :: IO Bool -> IO Bool -> IO Bool
>   (<||>) ma mb = ma >>= (\a -> if a then return True else mb)

These generalise to any Applicative, I think:

import Control.Applicative (liftA2)

(<&&>) = liftA2 (&&)
(<||>) = liftA2 (||)

-- Jack


More information about the Haskell-Cafe mailing list