[Haskell-beginners] Need some understanding on this behavior.

David McBride toad3k at gmail.com
Tue Feb 4 13:44:27 UTC 2020


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 <alexander at chenjia.nl> 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
> 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/20200204/a7ab58f8/attachment.html>


More information about the Beginners mailing list