Usually you want `foldl'` (with ' at the end), the strict version of `foldl`. It prevents the creation of intermediate thunks, so effectively a tail recursive iteration over the list in constant space.
`foldr` I almost never use, but it would be for: the return value is a lazy list and I will only need to evaluate a prefix.
This is what happens when you let Mathematicians name things on chalkboards. They don't want to run out of chalk and they get tired of spelling whole words very easily so they use short names and silly symbols. The name foldl' is "just" "fold left prime". Remember ' means "prime" from calculus class and thinking that was silly even then? Accidentally infected Haskell at a young age.
Yeah it's definitely unusual to allow ' to be part of the name of a variable, especially considering that it is, like C, the quote for character types.
In Haskell's case that is indirectly Lisp's fault. Lisp heard of Algol (C's design-by-committee "grandparent" on the family tree) identifier restrictions and thought they were silly. (I think Lisp is also often classified as Haskell's great-grandparent on the family tree? Lisp -> Scheme -> ML -> Haskell, I think?) As with most of that FP family the boundary between "operator" and "identifier" is real thin to nonexistent.
Aside: I've got half a feeling you could implement an APL-like directly in Haskell as a DSL using Unicode-named functions. I've seen Unicode Haskell files that look like APL (and GHC supports a surprising amount of that almost out of the box, as I recall).
A couple more examples of urgent but not important:
- Buying a pumpkin for Halloween: the stores are going to sell out of pumpkins and Halloween is going to pass, so it is urgent to buy a pumpkin while there are still pumpkins.
- Commenting on a controversy on social media: very quickly, the attention will move on to the next thing and you will lose the opportunity to comment on this thing.
Shameless self promotion, but you might be interested in scad-clj [0]: a DSL to write OpenSCAD with Clojure. You can get a decent interactive environment combining an editor with an OpenSCAD window set to only show the render [1].
`foldr` I almost never use, but it would be for: the return value is a lazy list and I will only need to evaluate a prefix.