I can’t get pass the poor variables naming, though.
zoop :: (a -> b -> b) -> b -> [a] -> b
zoop _ b [] = b
zoop abb b (a : as) = abb a $ zoop abb b as
Can barely be more precise than that, except for `zoop`, but that is obviously meant to be considered irrelevant to the point of the article.You will probably run into this in Haskell more than other languages though, because you can write a lot of general and abstract code in Haskell. In most other languages you cannot abstract over the types (higher-kinded types needed), and many still even lack polymorphism.