> import RegExpr.RegExprOperations examples > rA = L 'A' > rAstar = Star rA > rB = L 'B' > rBstar = Star rB > rAorBstar = Star (Choice rA rB) Some sample runs (using intersectRE2, intersectRE won't terminate for interesting cases) *RegExpIntersection> intersectRE2 rAstar rBstar <((<>|<>)|<>)*,((<'A',{}>|<'B',{}>)|<>)> *RegExpIntersection> eqRE Empty (intersectRE2 rAstar rBstar) True *RegExpIntersection> intersectRE2 rAorBstar rBstar <((<>|<>)|<>)*,((<'A',{}>|<'B',<((<>|<'B',<>>)|<>)*,((<'A',{}>|<>)|<>)>>)|<>)> *RegExpIntersection> eqRE rBstar (intersectRE2 rAorBstar rBstar) True *RegExpIntersection> intersectRE2 rAorBstar rAorBstar <((<>|<>)|<>)*,((<'A',<((<'A',<>>|<'B',<>>)|<>)*,((<>|<>)|<>)>>|<'B',<((<'A',<>>|<'B',<>>)|<>)*,((<>|<>)|<>)>>)|<>)> *RegExpIntersection> eqRE rAorBstar (intersectRE2 rAorBstar rAorBstar) True *RegExpIntersection> eqRE rAstar (intersectRE2 rAorBstar rAorBstar) False *RegExpIntersection> eqRE rBstar (intersectRE2 rAorBstar rAorBstar) False The regular expressions generated by the convert function are 'very verbose'. There's space for lots of improvement.