Recursion best practices - Carpe diem (Felix's blog)
idryman.org
There are not much design patterns on functional programming. I hope these guidelines can be a start
idryman.org
better_fibs 0 f1 f2 = []
better_fibs n f1 f2 = f1 : better_fibs (n-1) f2 (f1+f2)
as this generates the list lazily.