-- auxiliar para inserir uma string entre parêntesis paren :: String -> String paren s = "(" ++ s ++ ")" -- show de expressoes regulares optimizado por precedências showREPrec :: Int -> RegExp-> String showREPrec n = cataRegExp ("@", \a -> [a], \a b -> let s = (showREPrec 3 a) ++ "+" ++ (showREPrec 3 b) in if (n<=3) then s else paren s, \a b -> let s = (showREPrec 4 a) ++ (showREPrec 4 b) in if (n<=4) then s else paren s, \a -> let s = (showREPrec 5 a) ++ "*" in if (n<=5) then s else paren s, \a -> let s = (showREPrec 6 a) ++ "?" in if (n<=6) then s else paren s, \a -> let s = (showREPrec 7 a) ++ "^" in if (n<=7) then s else paren s ) -- instanciamento do tipo RegExp na classe Show através da showREPrec instance Show RegExp where show = showREPrec 0