@@ -10,6 +10,7 @@ module Ormolu.Printer.Meat.Declaration.Value
1010 )
1111where
1212
13+import Ormolu.Printer.Internal
1314import Bag (bagToList)
1415import BasicTypes
1516import Control.Monad
@@ -633,34 +634,29 @@ p_hsExpr = \case
633634p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
634635p_patSynBind PSB {..} = do
635636 txt "pattern "
636− let nonEmptySynDetails = \case
637− PrefixCon (_:_) -> True
638− RecCon (_:_) -> True
639− _ -> False
640637 case psb_dir of
641638 Unidirectional -> do
642639 p_rdrName psb_id
643− when (nonEmptySynDetails psb_args) space
644− p_patSynDetails psb_args
645− txt " <-"
646− breakpoint
647− inci (located psb_def p_pat)
640+ inci $ do
641+ p_patSynDetails psb_args
642+ txt " <-"
643+ breakpoint
644+ located psb_def p_pat
648645 ImplicitBidirectional -> do
649646 p_rdrName psb_id
650− when (nonEmptySynDetails psb_args) space
651− p_patSynDetails psb_args
652− txt " ="
653− breakpoint
654− inci (located psb_def p_pat)
647+ inci $ do
648+ p_patSynDetails psb_args
649+ txt " ="
650+ breakpoint
651+ located psb_def p_pat
655652 ExplicitBidirectional mgroup -> do
656653 p_rdrName psb_id
657− when (nonEmptySynDetails psb_args) space
658− p_patSynDetails psb_args
659− txt " <-"
660− breakpoint
661− inci (located psb_def p_pat)
662− newline
663654 inci $ do
655+ p_patSynDetails psb_args
656+ txt " <-"
657+ breakpoint
658+ located psb_def p_pat
659+ newline
664660 line (txt "where")
665661 inci (p_matchGroup (Function psb_id) mgroup)
666662p_patSynBind (XPatSynBind NoExt) = notImplemented "XPatSynBind"
@@ -668,9 +664,13 @@ p_patSynBind (XPatSynBind NoExt) = notImplemented "XPatSynBind"
668664p_patSynDetails :: HsPatSynDetails (Located RdrName) -> R ()
669665p_patSynDetails = \case
670666 PrefixCon xs ->
671− sitcc $ sep breakpoint p_rdrName xs
667+ switchLayout (getLoc <$> xs) $ do
668+ unless (null xs) breakpoint
669+ sitcc (sep breakpoint p_rdrName xs)
672670 RecCon xs ->
673− sitcc $ sep breakpoint (p_rdrName . recordPatSynPatVar) xs
671+ switchLayout (getLoc . recordPatSynPatVar <$> xs) $ do
672+ unless (null xs) breakpoint
673+ braces . sitcc $ sep (comma >> breakpoint) (p_rdrName . recordPatSynPatVar) xs
674674 InfixCon _ _ -> notImplemented "InfixCon"
675675
676676p_pat :: Pat GhcPs -> R ()