on master help sign in
Support infix patern synonyms
commite90508e88fa71badbc72bac559c23be3acc2a2a7 authorUtku Demir <me@utdemir.com> dateThu 5 Sep 2019, 09:48 (7 years ago) parentb2c6388
6 files changed+84−59
data/examples/declaration/value/pattern-synonyms/bidirectional-out.hs+15−12 data/examples/declaration/value/pattern-synonyms/bidirectional.hs+4 data/examples/declaration/value/pattern-synonyms/explicitely-bidirectional-out.hs+11−6 data/examples/declaration/value/pattern-synonyms/explicitely-bidirectional.hs+6 data/examples/declaration/value/pattern-synonyms/unidirectional-out.hs+8−8 src/Ormolu/Printer/Meat/Declaration/Value.hs+40−33
data/examples/declaration/value/pattern-synonyms/bidirectional-out.hs+15−12
@@ -8,18 +8,21 @@ pattern Arrow {t1, t2} = App "->" [t1, t2]
88pattern Arrow
99 { t1,
1010 t2
11− } =
12− App "->" [t1, t2]
11+ }
12+ = App "->" [t1, t2]
1313
14−pattern Int =
15− App "Int" []
14+pattern Int
15+ = App "Int" []
1616
17−pattern Maybe {t} =
18− App
19− "Maybe"
20− [t]
17+pattern Maybe {t}
18+ = App
19+ "Maybe"
20+ [t]
2121
22−pattern Maybe t =
23− App
24− "Maybe"
25− [t]
22+pattern Maybe t
23+ = App
24+ "Maybe"
25+ [t]
26+
27+pattern a :< b
28+ <- (a, b)
data/examples/declaration/value/pattern-synonyms/bidirectional.hs+4
@@ -15,3 +15,7 @@ pattern Maybe t =
1515 App
1616 "Maybe"
1717 [t]
18+
19+pattern a :< b <-
20+ (a , b)
21+
data/examples/declaration/value/pattern-synonyms/explicitely-bidirectional-out.hs+11−6
@@ -1,16 +1,21 @@
11{-# LANGUAGE PatternSynonyms #-}
22
3−pattern HeadC x <-
4− x : xs
3+pattern HeadC x
4+ <- x : xs
55 where
66 HeadC x = [x]
77
8−pattern HeadC' x <-
9− x : xs
8+pattern HeadC' x
9+ <- x : xs
1010 where
1111 HeadC' x = [x]
1212
13−pattern Simple <-
14− "Simple"
13+pattern Simple
14+ <- "Simple"
1515 where
1616 Simple = "Complicated"
17+
18+pattern a :< b
19+ <- (a, b)
20+ where
21+ a :< b = (a, b)
data/examples/declaration/value/pattern-synonyms/explicitely-bidirectional.hs+6
@@ -11,3 +11,9 @@ pattern HeadC' x <-
1111pattern Simple <- "Simple"
1212 where
1313 Simple = "Complicated"
14+
15+pattern a :< b <-
16+ (a , b)
17+ where
18+ a :< b = (a, b)
19+
data/examples/declaration/value/pattern-synonyms/unidirectional-out.hs+8−8
@@ -2,20 +2,20 @@
22
33pattern Head x <- x : xs
44
5−pattern Head' x <-
6− x : xs
5+pattern Head' x
6+ <- x : xs
77
8−pattern Head'' {x} <-
9− x : xs
8+pattern Head'' {x}
9+ <- x : xs
1010
11−pattern FirstTwo {x, y} <-
12− x : (y : xs)
11+pattern FirstTwo {x, y}
12+ <- x : (y : xs)
1313
1414pattern FirstTwo'
1515 { x,
1616 y
17− } <-
18− x : (y : xs)
17+ }
18+ <- x : (y : xs)
1919
2020pattern Simple <- "Simple"
2121
src/Ormolu/Printer/Meat/Declaration/Value.hs+40−33
@@ -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 "_"