@@ -182,7 +182,8 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
182182 BangPat _ _ -> True
183183 SplicePat _ _ -> True
184184 _ -> False
185− txt (if needsSpace then "\\ " else "\\")
185+ txt "\\"
186+ when needsSpace space
186187 sitcc stdCase
187188 LambdaCase -> stdCase
188189 return inci'
@@ -203,10 +204,10 @@ p_match' placer pretty style isInfix strictness m_pats m_grhss = do
203204 unless (length grhssGRHSs > 1) $ do
204205 case style of
205206 Function _ | hasGuards -> return ()
206− Function _ -> txt " ="
207− PatternBind -> txt " ="
207+ Function _ -> space >> txt "="
208+ PatternBind -> space >> txt "="
208209 s | isCase s && hasGuards -> return ()
209− _ -> txt " ->"
210+ _ -> space >> txt "->"
210211 let grhssSpan = combineSrcSpans' $
211212 getGRHSSpan . unLoc <$> NE.fromList grhssGRHSs
212213 patGrhssSpan = maybe grhssSpan
@@ -250,7 +251,8 @@ p_grhs' pretty style (GRHS NoExt guards body) =
250251 case guards of
251252 [] -> p_body
252253 xs -> do
253− txt "| "
254+ txt "|"
255+ space
254256 sitcc (sep (comma >> breakpoint) (sitcc . located' p_stmt) xs)
255257 space
256258 txt $ case style of
@@ -266,9 +268,10 @@ p_hsCmd :: HsCmd GhcPs -> R ()
266268p_hsCmd = \case
267269 HsCmdArrApp NoExt body input arrType _ -> do
268270 located body p_hsExpr
269− txt $ case arrType of
270− HsFirstOrderApp -> " -<"
271− HsHigherOrderApp -> " -<<"
271+ space
272+ case arrType of
273+ HsFirstOrderApp -> txt "-<"
274+ HsHigherOrderApp -> txt "-<<"
272275 placeHanging (exprPlacement (unLoc input)) $
273276 located input p_hsExpr
274277 HsCmdArrForm NoExt form Prefix _ cmds -> banana $ sitcc $ do
@@ -290,13 +293,16 @@ p_hsCmd = \case
290293 HsCmdLam NoExt mgroup -> p_matchGroup' cmdPlacement p_hsCmd Lambda mgroup
291294 HsCmdPar NoExt c -> parens (located c p_hsCmd)
292295 HsCmdCase NoExt e mgroup -> do
293− txt "case "
296+ txt "case"
297+ space
294298 located e p_hsExpr
295− txt " of"
299+ space
300+ txt "of"
296301 breakpoint
297302 inci (p_matchGroup' cmdPlacement p_hsCmd Case mgroup)
298303 HsCmdIf NoExt _ if' then' else' -> do
299− txt "if "
304+ txt "if"
305+ space
300306 located if' p_hsExpr
301307 breakpoint
302308 txt "then"
@@ -309,10 +315,12 @@ p_hsCmd = \case
309315 breakpoint
310316 inci (p_hsCmd x)
311317 HsCmdLet NoExt localBinds c -> do
312− txt "let "
318+ txt "let"
319+ space
313320 sitcc (located localBinds p_hsLocalBinds)
314321 breakpoint
315− txt "in "
322+ txt "in"
323+ space
316324 sitcc (located c p_hsCmd)
317325 HsCmdDo NoExt es -> do
318326 txt "do"
@@ -345,7 +353,8 @@ p_stmt' pretty = \case
345353 ApplicativeStmt {} -> notImplemented "ApplicativeStmt" -- generated by renamer
346354 BodyStmt NoExt body _ _ -> located body pretty
347355 LetStmt NoExt binds -> do
348− txt "let "
356+ txt "let"
357+ space
349358 sitcc $ located binds p_hsLocalBinds
350359 ParStmt {} ->
351360 -- NOTE 'ParStmt' should always be eliminated in 'gatherStmt' already,
@@ -386,7 +395,8 @@ p_stmt' pretty = \case
386395 breakpoint
387396 inci (p_hsExpr x)
388397 RecStmt {..} -> do
389− txt "rec "
398+ txt "rec"
399+ space
390400 sitcc $ sepSemi (located' (p_stmt' pretty)) recS_stmts
391401 XStmtLR {} -> notImplemented "XStmtLR"
392402
@@ -429,7 +439,8 @@ p_hsLocalBinds = \case
429439 -- Second argument of IPBind is always Left before type-checking.
430440 let p_ipBind (IPBind NoExt (Left name) expr) = do
431441 atom name
432− txt " ="
442+ space
443+ txt "="
433444 breakpoint
434445 useBraces $ inci $ located expr p_hsExpr
435446 p_ipBind _ = notImplemented "XHsIPBinds"
@@ -445,7 +456,8 @@ p_hsRecField
445456p_hsRecField = \HsRecField {..} -> do
446457 located hsRecFieldLbl atom
447458 unless hsRecPun $ do
448− txt " ="
459+ space
460+ txt "="
449461 let placement = exprPlacement (unLoc hsRecFieldArg)
450462 placeHanging placement $ located hsRecFieldArg p_hsExpr
451463
@@ -513,7 +525,8 @@ p_hsExpr = \case
513525 space
514526 located y p_hsExpr
515527 NegApp NoExt e _ -> do
516− txt "- "
528+ txt "-"
529+ space
517530 located e p_hsExpr
518531 HsPar NoExt e -> parens (located e p_hsExpr)
519532 SectionL NoExt x op -> do
@@ -541,13 +554,16 @@ p_hsExpr = \case
541554 ExplicitSum NoExt tag arity e ->
542555 p_unboxedSum tag arity (located e p_hsExpr)
543556 HsCase NoExt e mgroup -> do
544− txt "case "
557+ txt "case"
558+ space
545559 located e p_hsExpr
546− txt " of"
560+ space
561+ txt "of"
547562 breakpoint
548563 inci (p_matchGroup Case mgroup)
549564 HsIf NoExt _ if' then' else' -> do
550− txt "if "
565+ txt "if"
566+ space
551567 located if' p_hsExpr
552568 breakpoint
553569 inci $ do
@@ -563,10 +579,12 @@ p_hsExpr = \case
563579 breakpoint
564580 inci . sitcc $ sep newline (located' (p_grhs RightArrow)) guards
565581 HsLet NoExt localBinds e -> do
566− txt "let "
582+ txt "let"
583+ space
567584 dontUseBraces $ sitcc (located localBinds p_hsLocalBinds)
568− vlayout space (newline >> space)
569− txt "in "
585+ vlayout space (newline >> txt " ")
586+ txt "in"
587+ space
570588 sitcc (located e p_hsExpr)
571589 HsDo NoExt ctx es -> do
572590 let doBody header = do
@@ -586,7 +604,8 @@ p_hsExpr = \case
586604 lists = foldr (liftAppend . gatherStmt) [] stmts
587605 located yield p_stmt
588606 breakpoint
589− txt "| "
607+ txt "|"
608+ space
590609 p_parBody lists
591610 case ctx of
592611 DoExpr -> doBody "do"
@@ -619,7 +638,8 @@ p_hsExpr = \case
619638 located x p_hsExpr
620639 breakpoint
621640 inci $ do
622− txt ":: "
641+ txt "::"
642+ space
623643 let HsWC {..} = affix
624644 HsIB {..} = hswc_body
625645 located hsib_body p_hsType
@@ -636,12 +656,14 @@ p_hsExpr = \case
636656 FromTo from to -> brackets . sitcc $ do
637657 located from p_hsExpr
638658 breakpoint
639− txt ".. "
659+ txt ".."
660+ space
640661 located to p_hsExpr
641662 FromThenTo from next to -> brackets . sitcc $ do
642663 sitcc $ sep (comma >> breakpoint) (located' p_hsExpr) [from, next]
643664 breakpoint
644− txt ".. "
665+ txt ".."
666+ space
645667 located to p_hsExpr
646668 HsSCC NoExt _ name x -> do
647669 txt "{-# SCC "
@@ -688,27 +710,31 @@ p_hsExpr = \case
688710
689711p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
690712p_patSynBind PSB {..} = do
691− txt "pattern "
713+ txt "pattern"
714+ space
692715 case psb_dir of
693716 Unidirectional -> do
694717 p_rdrName psb_id
695718 inci $ do
696719 p_patSynDetails psb_args
697− txt " <-"
720+ space
721+ txt "<-"
698722 breakpoint
699723 located psb_def p_pat
700724 ImplicitBidirectional -> do
701725 p_rdrName psb_id
702726 inci $ do
703727 p_patSynDetails psb_args
704− txt " ="
728+ space
729+ txt "="
705730 breakpoint
706731 located psb_def p_pat
707732 ExplicitBidirectional mgroup -> do
708733 p_rdrName psb_id
709734 inci $ do
710735 p_patSynDetails psb_args
711− txt " <-"
736+ space
737+ txt "<-"
712738 breakpoint
713739 located psb_def p_pat
714740 newline
@@ -779,7 +805,8 @@ p_pat = \case
779805 ConPatOut {} -> notImplemented "ConPatOut" -- presumably created by renamer?
780806 ViewPat NoExt expr pat -> sitcc $ do
781807 located expr p_hsExpr
782− txt " ->"
808+ space
809+ txt "->"
783810 breakpoint
784811 inci (located pat p_pat)
785812 SplicePat NoExt splice -> p_hsSplice splice
@@ -789,7 +816,8 @@ p_pat = \case
789816 p_rdrName n
790817 breakpoint
791818 inci $ do
792− txt "+ "
819+ txt "+"
820+ space
793821 located k (atom . ol_val)
794822 SigPat hswc pat -> do
795823 located pat p_pat
@@ -802,7 +830,8 @@ p_pat_hsRecField HsRecField {..} = do
802830 located hsRecFieldLbl $ \x ->
803831 p_rdrName (rdrNameFieldOcc x)
804832 unless hsRecPun $ do
805− txt " ="
833+ space
834+ txt "="
806835 breakpoint
807836 inci (located hsRecFieldArg p_pat)
808837