
If you check on hoogle for how guard is written, it is just this
guard True = pure
https://hackage.haskell.org/package/base-4.14.0.0/docs/Control-Applicative.h...
()
guard False = empty
https://hackage.haskell.org/package/base-4.14.0.0/docs/Control-Applicative.h...
That means you can use the same thing in your own code
import Control.Applicative
pairs xs =
xs >>= \x ->
xs >>= \y ->
if (x + y == 2020) then pure (x,y) else empty
On Wed, Dec 2, 2020 at 5:31 AM mike h
Hi, I have sumIs2020P1' xs = do x <- xs y <- xs guard (x + y == 2020) pure (x,y)
which has been desugared from a list comprehension I would like to reduce this even more using >>= So I do sumIs2020P1'' xs = (a,b) where (a,b):rest = filter (\(x,y) -> x + y == 2020) pairs
pairs = xs >>= \x -> xs >>= \y -> pure (x,y)
but really I would like the guard to be within the >>= sections but I could not work out how to do it! i.e. I’m looking for something like (pseudo code)
pairs = xs >>= \x -> xs >>= \y -> if (x + y == 2020) then pure (x,y) else DO_NOTHING which would then allow the filter to be removed.
Many Thanks
Mike
Dr Mike Houghton
mike_k_houghton@yahoo.co.uk
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners