Safe Haskell  None 

Documentation
Equality for expressions. The difference between Eq
and ExprEq
is that
ExprEq
allows comparison of expressions with different value types. It is
assumed that when the types differ, the expressions also differ. The reason
for allowing comparison of different types is that this is convenient when
the types are existentially quantified.
ExprEq Semantics  
ExprEq dom => ExprEq (AST dom)  
ExprEq (Condition ctx)  
ExprEq (Construct ctx)  
ExprEq (Identity ctx)  
ExprEq (Literal ctx)  
Monad m => ExprEq (MONAD m)  
ExprEq (Select ctx)  
ExprEq (Tuple ctx)  
ExprEq (Lambda ctx) 

ExprEq (Variable ctx) 

(ExprEq expr1, ExprEq expr2) => ExprEq (:+: expr1 expr2)  
ExprEq expr => ExprEq (Decor info expr)  
ExprEq (Let ctxa ctxb) 