Evaluating this in Haskell produces an infinite loop, which is not an inhabitant of Bool. The error lies in the implementation of cast. It should detect the recursion, returning Nothing, and thus make paradox = False.

Deriving a formal semantics for cast would be an interesting project; any takers?