summaryrefslogtreecommitdiff
path: root/compiler/Language/Haskell/Syntax/Pat.hs
diff options
context:
space:
mode:
authorDanielRrr <daniel.rogozin@serokell.io>2021-11-03 13:11:26 +0300
committerDanielRrr <daniel.rogozin@serokell.io>2021-11-03 13:27:50 +0300
commit8a379ba2f6f66d7ab49e5479cba5a05fa9862ce8 (patch)
tree74ae5a9c94c4c6bed2183a7a384cddacd66b8568 /compiler/Language/Haskell/Syntax/Pat.hs
parenta7e1be3d84d2b7d0515f909175cdfa5dcf0dc55c (diff)
downloadhaskell-wip/17594-implementation.tar.gz
parser and renamer checkpointswip/17594-implementation
Diffstat (limited to 'compiler/Language/Haskell/Syntax/Pat.hs')
-rw-r--r--compiler/Language/Haskell/Syntax/Pat.hs32
1 files changed, 30 insertions, 2 deletions
diff --git a/compiler/Language/Haskell/Syntax/Pat.hs b/compiler/Language/Haskell/Syntax/Pat.hs
index 4393ad998a..02948d9664 100644
--- a/compiler/Language/Haskell/Syntax/Pat.hs
+++ b/compiler/Language/Haskell/Syntax/Pat.hs
@@ -19,8 +19,7 @@
-- See Note [Language.Haskell.Syntax.* Hierarchy] for why not GHC.Hs.*
module Language.Haskell.Syntax.Pat (
- Pat(..), LPat,
- ConLikeP,
+ Pat(..), LPat, MatchPat(..), LMatchPat, toLPats, toPats, toInvisPats, ConLikeP,
HsConPatDetails, hsConPatArgs,
HsRecFields(..), HsFieldBind(..), LHsFieldBind,
@@ -214,6 +213,35 @@ data Pat p
type family ConLikeP x
+data MatchPat pass
+ = VisPat (XVisPat pass) (LPat pass)
+ | InvisTyVarPat (XInvisTyVarPat pass) (LIdP pass)
+ | InvisWildTyPat (XInvisWildTyPat pass)
+ | XMatchPat !(XXMatchPat pass)
+
+type LMatchPat pass = XRec pass (MatchPat pass)
+
+toLPats :: forall pass. UnXRec pass => [LMatchPat pass] -> [LPat pass]
+toLPats [] = []
+toLPats (x : xs) =
+ case unXRec @pass x of
+ VisPat _ pat -> pat : toLPats xs
+ _ -> toLPats xs
+
+toPats :: forall pass. UnXRec pass => [MatchPat pass] -> [Pat pass]
+toPats [] = []
+toPats (x : xs) =
+ case x of
+ VisPat _ pat -> unXRec @pass pat : toPats xs
+ _ -> toPats xs
+
+toInvisPats :: forall pass. UnXRec pass => [LMatchPat pass] -> [LMatchPat pass]
+toInvisPats [] = []
+toInvisPats (x : xs) =
+ case unXRec @pass x of
+ InvisTyVarPat _ _ -> x : toInvisPats xs
+ InvisWildTyPat _ -> x : toInvisPats xs
+ _ -> toInvisPats xs
-- ---------------------------------------------------------------------