removeEpsilon :: RE -> RE
removeEpsilon (Plus a b)
    | a == Epsilon = b
    | b == Epsilon = a
    | a == Epsilon && b == Epsilon = Empty
    | otherwise = (removeEpsilon a) `Plus` (removeEpsilon b)
removeEpsilon :: RE -> RE
removeEpsilon (Plus a b)
    | a == Epsilon = b
    | b == Epsilon = a
    | a == Epsilon && b == Epsilon = Empty
    | otherwise = (removeEpsilon a) `Plus` (removeEpsilon b)
removeEpsilon (Plus a b)
    | a == Epsilon = b
    | b == Epsilon = a
    | a == Epsilon && b == Epsilon = Empty
    | otherwise = (removeEpsilon a) `Plus` (removeEpsilon b)