A good functional language lets you clearly define, manage, and trace where your code meets reality, though.
That kind-of needs strict static type systems, rather than loosey-goosey dynamic tag checking, though.
That's IMO the main reason statically type checked languages like C++/Java/etc work much better at large scale than runtime tag checked languages like Python/Clojure/etc.