<div dir="ltr"><div>I see now, thanks to both of you; I think I was thrown off by the term 'generators' -- the 'refinement' provided by the second generator is more like filter rather than map.</div><div><br></div><div>I guess if I actually wanted the case all the pairs were evaluated and resulted in [Bool] where the first occurrence of an item were True, rather than multiple generators I would have two nested list comprehensions? </div><div><br></div><div>Thanks everyone,</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Apr 26, 2020 at 9:39 AM Francesco Ariis <<a href="mailto:fa-ml@ariis.it">fa-ml@ariis.it</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">Hello Ken,<br>
<br>
On Sun, Apr 26, 2020 at 08:50:20AM -0400, Ken Overton wrote:<br>
> I recently came across this function which made me realize I don't<br>
> understand list comprehensions well. I hope someone can help me understand<br>
> them better by understanding this example better. The function takes a list<br>
> of Eq and returns the list of unique elements from it:<br>
> <br>
>     unique :: Eq a => [a] -> [a]<br>
>     unique xs = [x | (x,y) <- zip xs [0..], x `notElem` (take y xs)]<br>
> <br>
> <br>
> [...]<br>
> <br>
> So the first generator should produce [(Eq,Int)] as input to the second<br>
> generator? And the second generator should produce [Bool]?<br>
<br>
1. (x,y) <- zip xs [0..] -- generates a list of pairs.<br>
2. x `notElem` (take y xs) -- acts like a guard to 1., so only the `x`s<br>
   which are not in the first `y` elements of `xs` (in other words, the<br>
   previous elements of `xs`) will be returned.<br>
<br>
The examples on the wiki [1] show more way of using list<br>
comprehensions.<br>
<br>
[1] <a href="https://wiki.haskell.org/List_comprehension#Examples" rel="noreferrer" target="_blank">https://wiki.haskell.org/List_comprehension#Examples</a><br>
_______________________________________________<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><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div>Ken Overton</div><div>(917) 863-3937</div><div><a href="mailto:ken.overton@gmail.com" target="_blank">ken.overton@gmail.com</a></div><div><br></div></div>