Send Beginners mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of Beginners digest..."


Today's Topics:

   1. Re:  Desugar list comprehension (David McBride)
   2. Re:  Desugar list comprehension (mike h)


----------------------------------------------------------------------

Message: 1
Date: Wed, 2 Dec 2020 07:51:40 -0500
From: David McBride <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Desugar list comprehension
Message-ID:
        <CAN+Tr42Mx0XWDXg9T-FyWD_r5+K-7dCookK=ZkqwizVmxw64=a...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

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 <[email protected]> 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
>
> [email protected]
>
>
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> 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/c6c160ce/attachment-0001.html>

------------------------------

Message: 2
Date: Wed, 2 Dec 2020 15:47:05 +0000
From: mike h <[email protected]>
To: The Haskell-Beginners Mailing List - Discussion of primarily
        beginner-level topics related to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Desugar list comprehension
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"


Duh!  Of course, thanks David.



> On 2 Dec 2020, at 12:51, David McBride <[email protected]> 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 <[email protected] 
> <mailto:[email protected]>> 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
> 
> [email protected] <mailto:[email protected]>
> 
> 
> 
> _______________________________________________
> Beginners mailing list
> [email protected] <mailto:[email protected]>
> http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners 
> <http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners>
> _______________________________________________
> Beginners mailing list
> [email protected]
> 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-0001.html>

------------------------------

Subject: Digest Footer

_______________________________________________
Beginners mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners


------------------------------

End of Beginners Digest, Vol 149, Issue 2
*****************************************

Reply via email to