1{-# OPTIONS_GHC -Wall -fno-warn-unused-do-bind #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Parse.Pattern (term, expression) where
7import qualified AST.Pattern as P
8import qualified AST.Variable as Var
10import qualified Parse.Literal as Literal
11import qualified Reporting.Annotation as A
12import qualified Reporting.Region as R
21 oneOf [ record, tuple, list, termHelp ]
24termHelp :: Parser P.Raw
31 , mkCtor <$> qualifiedCapVar
32 , P.Literal <$> Literal.literal
36mkCtor :: Text -> P.Raw'
38 P.Ctor (Var.Raw ctor) []
59recordHelp :: [Text] -> Parser P.Raw'
68 return (P.Record vars)
78 do start <- getPosition
82 [ do (pattern, space) <- expression
84 tupleHelp start [pattern]
87 return (A.at start end (P.tuple []))
91tupleHelp :: R.Position -> [P.Raw] -> Parser P.Raw
92tupleHelp start patterns =
96 (pattern, space) <- expression
98 tupleHelp start (pattern:patterns)
105 do end <- getPosition
106 return (A.at start end (P.tuple (reverse patterns)))
119 [ do (pattern, space) <- expression
124 return (P.list end [])
128listHelp :: [P.Raw] -> Parser P.Raw
133 (pattern, space) <- expression
135 listHelp (pattern:patterns)
136 , do end <- getPosition
138 return (P.list end (reverse patterns))
146expression :: Parser (P.Raw, Space)
148 do start <- getPosition
150 exprHelp start [] cTerm
153consTerm :: Parser (P.Raw, R.Position, Space)
156 [ do start <- getPosition
157 ctor <- qualifiedCapVar
158 constructorHelp start ctor []
159 , (,,) <$> term <*> getPosition <*> whitespace
163exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, Space) -> Parser (P.Raw, Space)
164exprHelp start patterns (pattern, end, space) =
166 [ do checkSpaces space
170 exprHelp start (pattern:patterns) cTerm
171 , do checkSpaces space
175 newEnd <- getPosition
176 newSpace <- whitespace
178 ( A.at start newEnd (P.Alias alias (foldl (consHelp end) pattern patterns))
182 ( foldl (consHelp end) pattern patterns
188consHelp :: R.Position -> P.Raw -> P.Raw -> P.Raw
189consHelp end tl hd@(A.A (R.Region start _) _) =
190 A.at start end (P.Ctor (Var.Raw "::") [hd, tl])
193constructorHelp :: R.Position -> Text -> [P.Raw] -> Parser (P.Raw, R.Position, Space)
194constructorHelp start ctor args =
195 do end <- getPosition
198 [ do checkSpaces space
200 constructorHelp start ctor (arg:args)
202 ( 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