<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div><span style="font-family:arial,helvetica,sans-serif;">Hello All, </span></div>

<div><span style="font-family:arial,helvetica,sans-serif;">I was working on a homework problem where the task is to write the iterate function in terms of scanl. Came up with this:</span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">myIterate f x = scanl (const.f) x (repeat x)</span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">I went looking around for other solutions to check my work and found the following solution on the Haskell Wiki (https://wiki.haskell.org/Iterate):</span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;"><span class="kw3">iterate</span> f x <span class="sy0">=</span> <span class="kw3">scanl</span> f x <span class="br0">(</span><span class="kw3">repeat</span> x<span class="br0">)</span></span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">myIterate seems to work checked against the Prelude iterate but I don't know if it's a good solution or not, because the iterate solution on the Haskell Wiki throws a type error. Types of Prelude iterate and scanl are different, so I can see why, or am I missing something? Here is some REPL output:</span></div>

<div><span style="font-family:arial,helvetica,sans-serif;">Prelude iterate:</span></div>

<div><span style="font-family:arial,helvetica,sans-serif;">λ> take 10 (iterate (+1) 1)<br/>
[1,2,3,4,5,6,7,8,9,10]</span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">myIterate:</span></div>

<div><span style="font-family:arial,helvetica,sans-serif;">λ> take 10 (myIterate (+1) 1)<br/>
[1,2,3,4,5,6,7,8,9,10]</span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">Haskell Wiki solution:</span></div>

<div>
<div><span style="font-family:arial,helvetica,sans-serif;">λ> take 10 (iterate' (+1) 1)</span></div>

<div><span style="font-family:arial,helvetica,sans-serif;"><interactive>:63:20: error:<br/>
    • Occurs check: cannot construct the infinite type: a ~ a -> a<br/>
      Expected type: a -> a -> a<br/>
        Actual type: (a -> a) -> a -> a<br/>
    • In the first argument of ‘iterate'’, namely ‘(+ 1)’<br/>
      In the second argument of ‘take’, namely ‘(iterate' (+ 1) 1)’<br/>
      In the expression: take 10 (iterate' (+ 1) 1)<br/>
    • Relevant bindings include it :: [a] (bound at <interactive>:63:1)</span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">It will work if you pass it a function that takes two parameters though:</span></div>

<div><span style="font-family:arial,helvetica,sans-serif;">λ> take 10 (iterate' (+) 1)<br/>
[1,2,3,4,5,6,7,8,9,10]</span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">Any thoughts would be much appreciated! </span></div>

<div> </div>

<div><span style="font-family:arial,helvetica,sans-serif;">Andrea</span></div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>

<div> </div>
</div>

<div> </div>

<div> </div>

<div> </div></div></body></html>