Patch from #694, for the problem "empty is an identity for <> and $$" is
currently broken by eg. isEmpty (empty<>empty)"
-- ---------------------------------------------------------------------------
-- Vertical composition @$$@
-- ---------------------------------------------------------------------------
-- Vertical composition @$$@
-p $$ q = Above p False q
-p $+$ q = Above p True q
+above_ :: Doc -> Bool -> Doc -> Doc
+above_ p _ Empty = p
+above_ Empty _ q = q
+above_ p g q = Above p g q
+
+p $$ q = above_ p False q
+p $+$ q = above_ p True q
above :: Doc -> Bool -> RDoc -> RDoc
above (Above p g1 q1) g2 q2 = above p g1 (above q1 g2 q2)
above :: Doc -> Bool -> RDoc -> RDoc
above (Above p g1 q1) g2 q2 = above p g1 (above q1 g2 q2)
-- ---------------------------------------------------------------------------
-- Horizontal composition @<>@
-- ---------------------------------------------------------------------------
-- Horizontal composition @<>@
-p <> q = Beside p False q
-p <+> q = Beside p True q
+beside_ :: Doc -> Bool -> Doc -> Doc
+beside_ p _ Empty = p
+beside_ Empty _ q = q
+beside_ p g q = Beside p g q
+
+p <> q = beside_ p False q
+p <+> q = beside_ p True q
beside :: Doc -> Bool -> RDoc -> RDoc
-- Specification: beside g p q = p <g> q
beside :: Doc -> Bool -> RDoc -> RDoc
-- Specification: beside g p q = p <g> q