diff options
author | DanielRrr <daniel.rogozin@serokell.io> | 2021-11-03 13:11:26 +0300 |
---|---|---|
committer | DanielRrr <daniel.rogozin@serokell.io> | 2021-11-03 13:27:50 +0300 |
commit | 8a379ba2f6f66d7ab49e5479cba5a05fa9862ce8 (patch) | |
tree | 74ae5a9c94c4c6bed2183a7a384cddacd66b8568 /compiler/Language/Haskell/Syntax/Pat.hs | |
parent | a7e1be3d84d2b7d0515f909175cdfa5dcf0dc55c (diff) | |
download | haskell-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.hs | 32 |
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 -- --------------------------------------------------------------------- |