Fix a broken invariant
authorSimon Marlow <simonmar@microsoft.com>
Thu, 16 Mar 2006 13:41:51 +0000 (13:41 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Thu, 16 Mar 2006 13:41:51 +0000 (13:41 +0000)
Patch from #694,  for the problem "empty is an identity for <> and $$" is
currently broken by eg. isEmpty (empty<>empty)"

libraries/base/Text/PrettyPrint/HughesPJ.hs

index df9642a..54ce7e1 100644 (file)
@@ -606,8 +606,13 @@ mkUnion p q     = p `union_` q
 -- ---------------------------------------------------------------------------
 -- 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)
@@ -651,8 +656,13 @@ nilAboveNest g k q           | (not g) && (k > 0)        -- No newline if no ove
 -- ---------------------------------------------------------------------------
 -- 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