Interesting! All well noted and I'll look into this more.
I'm vaguely aware of fold's power and can definitely see how filter, map and the likes would be implemented in terms of it but I would be really interested in the infodump!
I'm just wondering, ignoring laziness and typing (or any language-specifics), if foldl could be written similar to (2)? Obviously it wouldn't be very good. I've written an example in Racket of what I have in mind:
(define (foldl fn initial lst)
(if (null? lst)
initial
(fn (car lst) (foldl fn initial (cdr lst)))))
(define (fac n)
(if (= n 0)
1
(* n (fac (- n 1)))))
(= (fac 3)
(foldl * 1 '(1 2 3)))
Thanks again for the info, really appreciated. :)