<div dir="ltr"><div>If you check on hoogle for how guard is written, it is just this</div><div></div><div><pre>guard True  = <code><a href="https://hackage.haskell.org/package/base-4.14.0.0/docs/Control-Applicative.html#v:pure" title="Control.Applicative">pure</a></code> ()
guard False = <code><a href="https://hackage.haskell.org/package/base-4.14.0.0/docs/Control-Applicative.html#v:empty" title="Control.Applicative">empty</a><br></code></pre><pre><code><font face="arial,sans-serif">That means you can use the same thing in your own code<br><br>import Control.Applicative<br><br>pairs xs =<br>  xs >>= \x -><br>    xs >>= \y -><br>      if (x + y == 2020) then pure (x,y) else empty<br></font></code></pre></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Dec 2, 2020 at 5:31 AM mike h <<a href="mailto:mike_k_houghton@yahoo.co.uk">mike_k_houghton@yahoo.co.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;">Hi,<div> I have </div><div><div style="color:rgb(51,51,51);background-color:rgb(253,246,227);font-family:Menlo,Monaco,"Courier New",monospace;font-size:20px;line-height:30px;white-space:pre-wrap"><div>sumIs2020P1' xs <span style="color:rgb(133,153,0)">=</span> <span style="color:rgb(133,153,0)">do</span> </div><div>    x <span style="color:rgb(133,153,0)"><-</span> xs</div><div>    y <span style="color:rgb(133,153,0)"><-</span> xs</div><div>    guard (x <span style="color:rgb(133,153,0)">+</span> y <span style="color:rgb(133,153,0)">==</span> <span style="color:rgb(211,54,130)">2020</span>)</div><div>    pure (x,y)</div></div></div><div><br></div><div>which has been desugared from a list comprehension</div><div>I would like to reduce this even more using >>= </div><div>So I do</div><div><div style="color:rgb(51,51,51);background-color:rgb(253,246,227);font-family:Menlo,Monaco,"Courier New",monospace;font-size:20px;line-height:30px;white-space:pre-wrap"><div>sumIs2020P1'' xs <span style="color:rgb(133,153,0)">=</span>  (a,b) <span style="color:rgb(133,153,0)">where</span></div><div>    (a,b)<span style="color:rgb(133,153,0)">:</span>rest <span style="color:rgb(133,153,0)">=</span> filter (<span style="color:rgb(133,153,0)">\</span>(x,y) <span style="color:rgb(133,153,0)">-></span> x <span style="color:rgb(133,153,0)">+</span> y <span style="color:rgb(133,153,0)">==</span> <span style="color:rgb(211,54,130)">2020</span>)  pairs       </div><br><div>    pairs <span style="color:rgb(133,153,0)">=</span> xs <span style="color:rgb(133,153,0)">>>=</span> <span style="color:rgb(133,153,0)">\</span>x <span style="color:rgb(133,153,0)">-></span> </div><div>                    xs <span style="color:rgb(133,153,0)">>>=</span> <span style="color:rgb(133,153,0)">\</span>y <span style="color:rgb(133,153,0)">-></span> </div><div>                        pure (x,y)</div><div></div></div></div><div><br></div><div>but really I would like the guard to be within the >>= sections but I could not work out </div><div>how to do it!</div><div>i.e. I’m looking for something like (pseudo code)</div><div><br></div><div><div style="color:rgb(51,51,51);font-family:Menlo,Monaco,"Courier New",monospace;font-size:20px;white-space:pre-wrap;background-color:rgb(253,246,227)">pairs <span style="color:rgb(133,153,0)">=</span> xs <span style="color:rgb(133,153,0)">>>=</span> <span style="color:rgb(133,153,0)">\</span>x <span style="color:rgb(133,153,0)">-></span> </div><div style="color:rgb(51,51,51);font-family:Menlo,Monaco,"Courier New",monospace;font-size:20px;white-space:pre-wrap;background-color:rgb(253,246,227)">                    xs <span style="color:rgb(133,153,0)">>>=</span> <span style="color:rgb(133,153,0)">\</span>y <span style="color:rgb(133,153,0)">-></span> </div><div style="color:rgb(51,51,51);font-family:Menlo,Monaco,"Courier New",monospace;font-size:20px;white-space:pre-wrap;background-color:rgb(253,246,227)"><span style="white-space:pre-wrap">                     </span>if (x + y == 2020) then pure (x,y) else DO_NOTHING</div><div style="color:rgb(51,51,51);font-family:Menlo,Monaco,"Courier New",monospace;font-size:20px;white-space:pre-wrap;background-color:rgb(253,246,227)">                        </div></div><div>which would then allow the filter to be removed. </div><div><br></div><div><br></div><div>Many Thanks</div><div><br></div><div>Mike</div><div><br></div><div><br></div><div><br><div>
<div>Dr Mike Houghton</div><div><br></div><div><a href="mailto:mike_k_houghton@yahoo.co.uk" target="_blank">mike_k_houghton@yahoo.co.uk</a></div><div><br></div><br>

</div>
<br></div></div>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</blockquote></div>