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.Region as R
22 oneOf [ record, tuple, list, termHelp ]
25termHelp :: Parser P.Raw
32 , mkCtor <$> qualifiedCapVar
33 , P.Literal <$> Literal.literal
37mkCtor :: Text -> P.Raw'
41 P.Literal (L.Boolean True)
44 P.Literal (L.Boolean False)
47 P.Ctor (Var.Raw ctor) []
68recordHelp :: [Text] -> Parser P.Raw'
77 return (P.Record vars)
87 do start <- getPosition
91 [ do (pattern, sPos) <- expression
93 tupleHelp start [pattern]
96 return (A.at start end (P.tuple []))
100tupleHelp :: R.Position -> [P.Raw] -> Parser P.Raw
101tupleHelp start patterns =
105 (pattern, sPos) <- expression
107 tupleHelp start (pattern:patterns)
114 do end <- getPosition
115 return (A.at start end (P.tuple (reverse patterns)))
128 [ do (pattern, sPos) <- expression
133 return (P.list end [])
137listHelp :: [P.Raw] -> Parser P.Raw
142 (pattern, sPos) <- expression
144 listHelp (pattern:patterns)
145 , do end <- getPosition
147 return (P.list end (reverse patterns))
155expression :: Parser (P.Raw, SPos)
157 do start <- getPosition
159 exprHelp start [] cTerm
162consTerm :: SParser P.Raw
165 [ do start <- getPosition
166 ctor <- qualifiedCapVar
167 constructorHelp start ctor []
168 , (,,) <$> term <*> getPosition <*> whitespace
172exprHelp :: R.Position -> [P.Raw] -> (P.Raw, R.Position, SPos) -> Parser (P.Raw, SPos)
173exprHelp start patterns (pattern, end, sPos) =
179 exprHelp start (pattern:patterns) cTerm
184 newEnd <- getPosition
185 newSpace <- whitespace
187 ( A.at start newEnd (P.Alias alias (foldl (consHelp end) pattern patterns))
191 ( foldl (consHelp end) pattern patterns
197consHelp :: R.Position -> P.Raw -> P.Raw -> P.Raw
198consHelp end tl hd@(A.A (R.Region start _) _) =
199 A.at start end (P.Ctor (Var.Raw "::") [hd, tl])
202constructorHelp :: R.Position -> Text -> [P.Raw] -> SParser P.Raw
203constructorHelp start ctor args =
204 do end <- getPosition
209 constructorHelp start ctor (arg:args)
211 ( 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