1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Parse.Pattern (term, expression) where
7import qualified AST.Literal as L
8import qualified AST.Pattern as P
9import qualified AST.Variable as Var
11import qualified Parse.Literal as Literal
12import qualified Reporting.Annotation as A
13import qualified Reporting.Error.Syntax as E
14import qualified Reporting.Region as R
24 do start <- getPosition
33termHelp :: R.Position -> Parser P.Raw
37 [ underscore >> return P.Anything
39 , mkCtor <$> qualifiedCapVar
40 , P.Literal <$> Literal.literal
43 return (A.at start end pattern)
46mkCtor :: Text -> P.Raw'
50 P.Literal (L.Boolean True)
53 P.Literal (L.Boolean False)
56 P.Ctor (Var.Raw ctor) []
63record :: R.Position -> Parser P.Raw
66 inContext start E.ExprRecord $
71 recordHelp start [var]
74 return (A.at start end (P.Record []))
78recordHelp :: R.Position -> [Text] -> Parser P.Raw
79recordHelp start vars =
85 recordHelp start (var:vars)
88 return (A.at start end (P.Record vars))
96tuple :: R.Position -> Parser P.Raw
99 inContext start E.ExprTuple $
102 [ do (pattern, sPos) <- expression
104 tupleHelp start [pattern]
107 return (A.at start end (P.tuple []))
111tupleHelp :: R.Position -> [P.Raw] -> Parser P.Raw
112tupleHelp start patterns =
116 (pattern, sPos) <- expression
118 tupleHelp start (pattern:patterns)
125 do end <- getPosition
126 return (A.at start end (P.tuple (reverse patterns)))
134list :: R.Position -> Parser P.Raw
137 inContext start E.PatternList $
140 [ do (pattern, sPos) <- expression
145 return (P.list end [])
149listHelp :: [P.Raw] -> Parser P.Raw
154 (pattern, sPos) <- expression
156 listHelp (pattern:patterns)
157 , do end <- getPosition
159 return (P.list end (reverse patterns))
167expression :: Parser (P.Raw, SPos)
170 do start <- getPosition
172 exprHelp start [] cTerm
175consTerm :: SParser P.Raw
178 [ do start <- getPosition
179 ctor <- qualifiedCapVar
180 constructorHelp start ctor []
181 , (,,) <$> term <*> getPosition <*> whitespace
185exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, SPos) -> Parser (P.Raw, SPos)
186exprHelp start patterns (pattern, end, sPos) =
192 exprHelp start (pattern:patterns) cTerm
197 newEnd <- getPosition
198 newSpace <- whitespace
200 ( A.at start newEnd (P.Alias alias (foldl (consHelp end) pattern patterns))
204 ( foldl (consHelp end) pattern patterns
210consHelp :: R.Position -> P.Raw -> P.Raw -> P.Raw
211consHelp end tl hd@(A.A (R.Region start _) _) =
212 A.at start end (P.Ctor (Var.Raw "::") [hd, tl])
215constructorHelp :: R.Position -> Text -> [P.Raw] -> SParser P.Raw
216constructorHelp start ctor args =
217 do end <- getPosition
222 constructorHelp start ctor (arg:args)
224 ( A.at start end (P.Ctor (Var.Raw ctor) (reverse args))
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list