on master help sign in
Fix rendering of implicit bidirectional pattern synonyms
99619d6mrkkrp
data/examples/declaration/value/pattern-synonyms/bidirectional-out.hs+4
@@ -1,6 +1,10 @@
1+{-# LANGUAGE PatternSynonyms #-}
2+
1pattern Arrow t1 t2 = App "->" [t1, t2]
3pattern Arrow t1 t2 = App "->" [t1, t2]
4+
2pattern Int =
5pattern Int =
3 App "Int" []
6 App "Int" []
7+
4pattern Maybe t =
8pattern Maybe t =
5 App
9 App
6 "Maybe"
10 "Maybe"
data/examples/declaration/value/pattern-synonyms/bidirectional.hs+2
@@ -1,3 +1,5 @@
1+{-# LANGUAGE PatternSynonyms #-}
2+
1pattern Arrow t1 t2 = App "->" [t1, t2]
3pattern Arrow t1 t2 = App "->" [t1, t2]
2pattern Int =
4pattern Int =
3 App "Int" []
5 App "Int" []
data/examples/declaration/value/pattern-synonyms/explicitely-bidirectional-out.hs+6
@@ -9,3 +9,9 @@ pattern HeadC' x <-
9 x : xs
9 x : xs
10 where
10 where
11 HeadC' x = [x]
11 HeadC' x = [x]
12+
13+pattern Simple <-
14+ "Simple"
15+ where
16+ Simple =
17+ "Complicated"
data/examples/declaration/value/pattern-synonyms/explicitely-bidirectional.hs+4
@@ -7,3 +7,7 @@ pattern HeadC' x <-
7 x:xs
7 x:xs
8 where
8 where
9 HeadC' x = [x]
9 HeadC' x = [x]
10+
11+pattern Simple <- "Simple"
12+ where
13+ Simple = "Complicated"
data/examples/declaration/value/pattern-synonyms/unidirectional-out.hs+2
@@ -4,3 +4,5 @@ pattern Head x <- x : xs
4
4
5pattern Head' x <-
5pattern Head' x <-
6 x : xs
6 x : xs
7+
8+pattern Simple <- "Simple"
data/examples/declaration/value/pattern-synonyms/unidirectional.hs+2
@@ -4,3 +4,5 @@ pattern Head x <- x:xs
4
4
5pattern Head' x
5pattern Head' x
6 <- x:xs
6 <- x:xs
7+
8+pattern Simple <- "Simple"
src/Ormolu/Printer/Meat/Declaration/Value.hs+8−4
@@ -575,24 +575,28 @@ p_hsExpr = \case
575p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
575p_patSynBind :: PatSynBind GhcPs GhcPs -> R ()
576p_patSynBind PSB {..} = do
576p_patSynBind PSB {..} = do
577 txt "pattern "
577 txt "pattern "
578+ let nonEmptySynDetails = \case
579+ PrefixCon (_:_) -> True
580+ RecCon (_:_) -> True
581+ _ -> False
578 case psb_dir of
582 case psb_dir of
579 Unidirectional -> do
583 Unidirectional -> do
580 p_rdrName psb_id
584 p_rdrName psb_id
581− space
585+ when (nonEmptySynDetails psb_args) space
582 p_patSynDetails psb_args
586 p_patSynDetails psb_args
583 txt " <-"
587 txt " <-"
584 breakpoint
588 breakpoint
585 inci (located psb_def p_pat)
589 inci (located psb_def p_pat)
586 ImplicitBidirectional -> do
590 ImplicitBidirectional -> do
587 p_rdrName psb_id
591 p_rdrName psb_id
588− space
592+ when (nonEmptySynDetails psb_args) space
589 p_patSynDetails psb_args
593 p_patSynDetails psb_args
590 txt " ="
594 txt " ="
591 breakpoint
595 breakpoint
592− located psb_def p_pat
596+ inci (located psb_def p_pat)
593 ExplicitBidirectional mgroup -> do
597 ExplicitBidirectional mgroup -> do
594 p_rdrName psb_id
598 p_rdrName psb_id
595− space
599+ when (nonEmptySynDetails psb_args) space
596 p_patSynDetails psb_args
600 p_patSynDetails psb_args
597 txt " <-"
601 txt " <-"
598 breakpoint
602 breakpoint