on fac1c25 help sign in
elk/src/Nitpick/Pattern.hs
71 lines 1.5 kB history raw
1module Nitpick.Pattern where
3import qualified Data.List as List
4import qualified Data.Set as Set
6import qualified AST.Literal as L
7import qualified AST.Pattern as P
8import qualified AST.Variable as Var
9import qualified Reporting.Annotation as A
12data Pattern
13 = Data Var.Canonical [Pattern]
14 | Record [String]
15 | Alias String Pattern
16 | Var String
17 | Anything
18 | Literal L.Literal
19 | AnythingBut (Set.Set L.Literal)
20 deriving (Show, Eq)
23fromCanonicalPattern :: P.CanonicalPattern -> Pattern
24fromCanonicalPattern (A.A _ pattern) =
25 case pattern of
26 P.Data tag patterns ->
27 Data tag (map fromCanonicalPattern patterns)
29 P.Record fields ->
30 Record fields
32 P.Alias name pattern ->
33 Alias name (fromCanonicalPattern pattern)
35 P.Var name ->
36 Var name
38 P.Anything ->
39 Anything
41 P.Literal literal ->
42 Literal literal
45-- TO STRING
47toString :: Pattern -> String
48toString pattern =
49 case pattern of
50 Data tag args ->
51 List.intercalate " " (Var.toString tag : map toString args)
53 Record fields ->
54 "{ " ++ List.intercalate ", " fields ++ " }"
56 Alias alias realPattern ->
57 toString realPattern ++ " as " ++ alias
59 Var name ->
60 name
62 Anything ->
63 "_"
65 Literal literal ->
66 L.toString literal
68 AnythingBut literalSet ->
69 List.intercalate " " ("<values besides:" : map L.toString (Set.toList literalSet))