import Data.List(notElem) import Data.Function(on) data MLABCD = A | B | C | D | MLABCD :# MLABCD deriving Show removeParenteses :: String -> String removeParenteses = filter (\char -> notElem char "()") instance Eq MLABCD where m0 == m1 = removeParenteses (show m0) == removeParenteses (show m1) -- poderĂ­amos ter usado -- on :: (b -> b -> c) -> (a -> b) -> a -> a -> c -- com b = String, c = Bool, a = MLABCD -- seria: -- (==) = (==) `on` (removeParenteses . show) x = (A :# B) :# C y = A :# (B :# C)