<br><br><div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&gt;<br>&gt; I don&#39;t think this is possible.&nbsp;&nbsp;Perhaps you misread the original problem
<br>&gt; description?&nbsp;&nbsp;The unique function is supposed to return a list of those<br>&gt; elements which occur exactly once in the input list, which is impossible to<br>&gt; determine for an infinite input list (the only way to prove that a given
<br>&gt; element occurs only once in a list, in the absence of any other information,<br>&gt; is to examine every element of the list).&nbsp;&nbsp;Of course, a function that<br>&gt; behaves like the unix utility &quot;uniq&quot; ( 
i.e. returning only one copy of every<br>&gt; list element) is possible to implement lazily in the manner you describe.<br><br>Why wouldn&#39;t this work?&nbsp;&nbsp;(I haven&#39;t tested it, sorry)<br><br>unique = unique&#39; []<br>
<br>unique&#39; _ [] = []<br>unique&#39; history (x:xs) = if x `elem` history<br>&nbsp;&nbsp;then next<br>&nbsp;&nbsp;else (x:next) where next = (uniq&#39; (x:hist) xs)</blockquote><div><br>Again, this is solving a different problem than&nbsp; what the OP stated. Using your definition:
<br><br>&nbsp;Prelude&gt; :l unique<br>[1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( unique.hs, interpreted )<br>Ok, modules loaded: Main.<br>*Main&gt; unique [1,2,3,1]<br>[1,2,3]<br>*Main&gt; <br><br></div>...which behaves like the Unix utility &#39;uniq&#39;.&nbsp; But the problem described originally is to write a function which produces [2,3] when given the same input; 1 is not included in the output since it occurs more than once.
<br><br>-Brent<br></div>