1{-# OPTIONS_GHC -Wall #-}
2module AST.Pattern where
4import qualified Data.Set as Set
6import qualified AST.Literal as L
7import qualified AST.Variable as Var
8import qualified Reporting.Annotation as A
9import qualified Reporting.Region as R
13 A.Annotated ann (Pattern' ann var)
17 = Data var [Pattern ann var]
19 | Alias String (Pattern ann var)
26 Pattern R.Region Var.Raw
30 Pattern' R.Region Var.Raw
34 Pattern R.Region Var.Canonical
37isVar :: String -> Pattern ann var -> Bool
38isVar name (A.A _ pattern) =
47list :: R.Position -> [Raw] -> Raw
51 A.at end end (Data (Var.Raw "[]") [])
53 pattern@(A.A (R.Region start _) _) : rest ->
54 A.at start end (Data (Var.Raw "::") [pattern, list end rest])
57consMany :: R.Position -> [Raw] -> Raw
58consMany end patterns =
59 let cons hd@(A.A (R.Region start _) _) tl =
60 A.at start end (Data (Var.Raw "::") [hd, tl])
67 Data (Var.Raw ("_Tuple" ++ show (length patterns))) patterns
74boundVars :: Pattern ann var -> [A.Annotated ann String]
75boundVars (A.A ann pattern) =
80 Alias name realPattern ->
81 A.A ann name : boundVars realPattern
84 concatMap boundVars patterns
96member :: String -> Pattern ann var -> Bool
98 any (name==) (map A.drop (boundVars pattern))
101boundVarSet :: Pattern ann var -> Set.Set String
103 Set.fromList (map A.drop (boundVars pattern))
106boundVarList :: Pattern ann var -> [String]
107boundVarList pattern =
108 Set.toList (boundVarSet pattern)
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