[Haskell-beginners] Desugar list comprehension

mike h mike_k_houghton at yahoo.co.uk
Wed Dec 2 15:47:05 UTC 2020


Duh!  Of course, thanks David.



> On 2 Dec 2020, at 12:51, David McBride <toad3k at gmail.com> wrote:
> 
> 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.html#v:pure> ()
> guard False = empty <https://hackage.haskell.org/package/base-4.14.0.0/docs/Control-Applicative.html#v:empty>
> 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 <mike_k_houghton at yahoo.co.uk <mailto:mike_k_houghton at yahoo.co.uk>> wrote:
> 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 at yahoo.co.uk <mailto:mike_k_houghton at yahoo.co.uk>
> 
> 
> 
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org <mailto:Beginners at haskell.org>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20201202/876d56df/attachment.html>


More information about the Beginners mailing list