@@ -726,50 +726,57 @@ p_hsExpr = \case
726726
727727p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
728728p_patSynBind PSB {..} = do
729+ let rhs = case psb_dir of
730+ Unidirectional -> do
731+ txt "<-"
732+ space
733+ located psb_def p_pat
734+ ImplicitBidirectional -> do
735+ txt "="
736+ space
737+ located psb_def p_pat
738+ ExplicitBidirectional mgroup -> do
739+ txt "<-"
740+ space
741+ located psb_def p_pat
742+ newline
743+ line (txt "where")
744+ inci (p_matchGroup (Function psb_id) mgroup)
729745 txt "pattern"
730− space
731− case psb_dir of
732− Unidirectional -> do
746+ case psb_args of
747+ PrefixCon xs -> do
748+ space
733749 p_rdrName psb_id
734− inci $ do
735− p_patSynDetails psb_args
736− space
737− txt "<-"
750+ inci $ do
751+ switchLayout (getLoc <$> xs) $ do
752+ unless (null xs) breakpoint
753+ sitcc (sep breakpoint p_rdrName xs)
738754 breakpoint
739− located psb_def p_pat
740− ImplicitBidirectional -> do
755+ rhs
756+ RecCon xs -> do
757+ space
741758 p_rdrName psb_id
742759 inci $ do
743− p_patSynDetails psb_args
760+ switchLayout (getLoc . recordPatSynPatVar <$> xs) $ do
761+ unless (null xs) breakpoint
762+ braces . sitcc $
763+ sep (comma >> breakpoint) (p_rdrName . recordPatSynPatVar) xs
764+ breakpoint
765+ rhs
766+ InfixCon l r -> do
767+ switchLayout [getLoc l, getLoc r] $ do
744768 space
745− txt "="
769+ p_rdrName l
746770 breakpoint
747− located psb_def p_pat
748− ExplicitBidirectional mgroup -> do
749− p_rdrName psb_id
771+ inci $ do
772+ p_rdrName psb_id
773+ space
774+ p_rdrName r
750775 inci $ do
751− p_patSynDetails psb_args
752− space
753− txt "<-"
754776 breakpoint
755− located psb_def p_pat
756− newline
757− line (txt "where")
758− inci (p_matchGroup (Function psb_id) mgroup)
777+ rhs
759778p_patSynBind (XPatSynBind NoExt) = notImplemented "XPatSynBind"
760779
761−p_patSynDetails :: HsPatSynDetails (Located RdrName) -> R ()
762−p_patSynDetails = \case
763− PrefixCon xs ->
764− switchLayout (getLoc <$> xs) $ do
765− unless (null xs) breakpoint
766− sitcc (sep breakpoint p_rdrName xs)
767− RecCon xs ->
768− switchLayout (getLoc . recordPatSynPatVar <$> xs) $ do
769− unless (null xs) breakpoint
770− braces . sitcc $ sep (comma >> breakpoint) (p_rdrName . recordPatSynPatVar) xs
771− InfixCon _ _ -> notImplemented "InfixCon"
772−
773780p_pat :: Pat GhcPs -> R ()
774781p_pat = \case
775782 WildPat NoExt -> txt "_"