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:  Need some understanding on this behavior. (David McBride)
   2. Re:  Need some understanding on this behavior. (Alexander Chen)
   3. Re:  Need some understanding on this behavior. (Ut Primum)


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

Message: 1
Date: Tue, 4 Feb 2020 08:44:27 -0500
From: David McBride <[email protected]>
To: Alexander Chen <[email protected]>,  The Haskell-Beginners
        Mailing List - Discussion of primarily beginner-level topics related
        to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Need some understanding on this
        behavior.
Message-ID:
        <can+tr40pbhgghf9trwdb71zs0y7-wsyuyl3wk8w04v4uebx...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

You can absolutely use a lazy list in a list comprehension.  What you
cannot do is evaluate an infinitely long list.

When you evaluate it so that it will be printed you are saying, print the
*entire* list.  You may know that this list will never contain an element
over 100, but as far as haskell is concerned, there could be an element
after 100 and it will keep crunching to find it, by incrementing x and
testing it against x <= 100 forever, even though it will never succeed.

On Mon, Feb 3, 2020 at 3:14 AM Alexander Chen <[email protected]> wrote:

>
> hi,
>
> I need some understanding on the following behavior:
>
> a = [1..]
> [x | x <-a, x <= 100]
>
> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
>
> (note the missing ']' which results in the command not finishing)
>
> b = take 1000 a
> [x | x <-b, x <= 100]
>
> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]
>
> Note, I took more for b  just for ease sake. But now the command finishes
> correctly.
>
>
> Question:
> why can i not use a lazy list directly in a list comprehension?
>
> best,
>
>
>
>
> _______________________________________________
> 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/20200204/a7ab58f8/attachment-0001.html>

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

Message: 2
Date: Tue, 4 Feb 2020 15:00:11 +0100 (CET)
From: Alexander Chen <[email protected]>
To: David McBride <[email protected]>, The Haskell-Beginners Mailing
        List - Discussion of primarily beginner-level topics related to
        Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Need some understanding on this
        behavior.
Message-ID: <[email protected]>
Content-Type: text/plain; charset="utf-8"

Hi,

thank you for the explanation. I know now how not to use it but for deeper 
understanding.

question:
Can a lazy list be ordered or is that just not possible? And how can you create 
a lazy list like this [1..] without there being any implicit order in it?

I don't want to be nitt-picking, i am trying to reconcile this paradox for 
deeper understanding.

thank you.

best,
  

February 4, 2020 2:44:27 PM CET David McBride <[email protected]> wrote:
You can absolutely use a lazy list in a list comprehension.  What you cannot do 
is evaluate an infinitely long list.

When you evaluate it so that it will be printed you are saying, print the 
*entire* list.  You may know that this list will never contain an element over 
100, but as far as haskell is concerned, there could be an element after 100 
and it will keep crunching to find it, by incrementing x and testing it against 
x <= 100 forever, even though it will never succeed.

On Mon, Feb 3, 2020 at 3:14 AM Alexander Chen <[email protected]> wrote:

hi,

I need some understanding on the following behavior:

a = [1..]
[x | x <-a, x <= 100]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100

(note the missing ']' which results in the command not finishing)

b = take 1000 a
[x | x <-b, x <= 100]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]

Note, I took more for b  just for ease sake. But now the command finishes 
correctly.

Question:
why can i not use a lazy list directly in a list comprehension?

best,

_______________________________________________
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/20200204/289e66f8/attachment-0001.html>

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

Message: 3
Date: Tue, 4 Feb 2020 16:23:18 +0100
From: Ut Primum <[email protected]>
To: Alexander Chen <[email protected]>,  The Haskell-Beginners
        Mailing List - Discussion of primarily beginner-level topics related
        to Haskell <[email protected]>
Subject: Re: [Haskell-beginners] Need some understanding on this
        behavior.
Message-ID:
        <CANjDmKKJ2SCQm4Popwxk9bYoGRtxXUbX4ERUqiuqqcC+0=u...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hi,

You can't sort an infinite list. It is easy to see this because you can't
even decide what the first element of the ordered list should be, without
checking all the list elements. Since they are infinite, you can't do that.

Best,
Ut

Il mar 4 feb 2020, 15:00 Alexander Chen <[email protected]> ha scritto:

> Hi,
>
> thank you for the explanation. I know now how not to use it but for deeper
> understanding.
>
> question:
> Can a lazy list be ordered or is that just not possible? And how can you
> create a lazy list like this [1..] without there being any implicit order
> in it?
>
> I don't want to be nitt-picking, i am trying to reconcile this paradox for
> deeper understanding.
>
> thank you.
>
> best,
>
>
> February 4, 2020 2:44:27 PM CET David McBride <[email protected]> wrote:
>
> You can absolutely use a lazy list in a list comprehension.  What you
> cannot do is evaluate an infinitely long list.
>
> When you evaluate it so that it will be printed you are saying, print the
> *entire* list.  You may know that this list will never contain an element
> over 100, but as far as haskell is concerned, there could be an element
> after 100 and it will keep crunching to find it, by incrementing x and
> testing it against x <= 100 forever, even though it will never succeed.
>
> On Mon, Feb 3, 2020 at 3:14 AM Alexander Chen <[email protected]>
> wrote:
>
>
> hi,
>
> I need some understanding on the following behavior:
>
> a = [1..]
> [x | x <-a, x <= 100]
>
> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
>
> (note the missing ']' which results in the command not finishing)
>
> b = take 1000 a
> [x | x <-b, x <= 100]
>
> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100]
>
> Note, I took more for b  just for ease sake. But now the command finishes
> correctly.
>
>
> Question:
> why can i not use a lazy list directly in a list comprehension?
>
> best,
>
>
>
>
> _______________________________________________
> Beginners mailing list
> [email protected]
> 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/20200204/9df85704/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 140, Issue 2
*****************************************

Reply via email to