remove {-# LANGUAGE DoAndIfThenElse #-} pragma, because Haskell2010 adopted DoAndIfThenElse
add comparison operators that produce witnesses