"Telling lies" in functional programming code


Lately i’ve been reading about better error-handling and type checking in functional programming, specifically, in Clojure.

What i found out is that throwing exceptions and checking types or nulls, is considered as “telling lies” in functional code, things i do all the time both in PHP and in Clojure, since they are dynamic.

You can find a thread about it here, not the only place when people discuss about it though xD.

I’d love to know your take on this, are they correct? are these “rules” going to improve code maintainability? if so what tools can i use in Clojure in order to follow them. Personally i haven’t had the troubles they’ve with exceptions and type checking (guard clauses).