Scanl expressed as fold
Using reverse is generally a bad idea for performance — especially since Haskell lists can be infinite!  Observe:

*Main&gt; let triangularNumbers = scanl (+) 0 [1, 2 ..]
*Main&gt; let triangularNumbers2 = scanl2 (+) 0 [1, 2 ..]
*Main&gt; take 5 triangularNumbers
[0,1,3,6,10]
*Main&gt; take 5 triangularNumbers2          -- hangs forever