I find that argument valid for functional programming languages with no type system like LISP. They promised us black box abstraction without giving us hints about what kind of data a procedure takes.
but with Haskell the type system usually gives sufficient hints on what is happening within a procedure
but with Haskell the type system usually gives sufficient hints on what is happening within a procedure