roc/test/snapshots/match_expr/pattern_alternatives_basic.md
2025-10-25 11:17:49 -04:00

143 lines
3.2 KiB
Markdown

# META
~~~ini
description=Basic pattern alternatives with multiple tag patterns
type=snippet
~~~
# SOURCE
~~~roc
Color : [Red, Green, Blue, Yellow, Orange, Purple]
kind : Color -> Str
kind = |color| match color {
Red | Green | Blue => "primary"
Yellow | Orange | Purple => "secondary"
}
~~~
# EXPECTED
NIL
# PROBLEMS
NIL
# TOKENS
~~~zig
UpperIdent,OpColon,OpenSquare,UpperIdent,Comma,UpperIdent,Comma,UpperIdent,Comma,UpperIdent,Comma,UpperIdent,Comma,UpperIdent,CloseSquare,
LowerIdent,OpColon,UpperIdent,OpArrow,UpperIdent,
LowerIdent,OpAssign,OpBar,LowerIdent,OpBar,KwMatch,LowerIdent,OpenCurly,
UpperIdent,OpBar,UpperIdent,OpBar,UpperIdent,OpFatArrow,StringStart,StringPart,StringEnd,
UpperIdent,OpBar,UpperIdent,OpBar,UpperIdent,OpFatArrow,StringStart,StringPart,StringEnd,
CloseCurly,
EndOfFile,
~~~
# PARSE
~~~clojure
(file
(type-module)
(statements
(s-type-decl
(header (name "Color")
(args))
(ty-tag-union
(tags
(ty (name "Red"))
(ty (name "Green"))
(ty (name "Blue"))
(ty (name "Yellow"))
(ty (name "Orange"))
(ty (name "Purple")))))
(s-type-anno (name "kind")
(ty-fn
(ty (name "Color"))
(ty (name "Str"))))
(s-decl
(p-ident (raw "kind"))
(e-lambda
(args
(p-ident (raw "color")))
(e-match
(e-ident (raw "color"))
(branches
(branch
(p-alternatives
(p-tag (raw "Red"))
(p-tag (raw "Green"))
(p-tag (raw "Blue")))
(e-string
(e-string-part (raw "primary"))))
(branch
(p-alternatives
(p-tag (raw "Yellow"))
(p-tag (raw "Orange"))
(p-tag (raw "Purple")))
(e-string
(e-string-part (raw "secondary"))))))))))
~~~
# FORMATTED
~~~roc
Color : [Red, Green, Blue, Yellow, Orange, Purple]
kind : Color -> Str
kind = |color| match color {
Red | Green | Blue => "primary"
Yellow | Orange | Purple => "secondary"
}
~~~
# CANONICALIZE
~~~clojure
(can-ir
(d-let
(p-assign (ident "kind"))
(e-lambda
(args
(p-assign (ident "color")))
(e-match
(match
(cond
(e-lookup-local
(p-assign (ident "color"))))
(branches
(branch
(patterns
(pattern (degenerate false)
(p-applied-tag))
(pattern (degenerate false)
(p-applied-tag))
(pattern (degenerate false)
(p-applied-tag)))
(value
(e-string
(e-literal (string "primary")))))
(branch
(patterns
(pattern (degenerate false)
(p-applied-tag))
(pattern (degenerate false)
(p-applied-tag))
(pattern (degenerate false)
(p-applied-tag)))
(value
(e-string
(e-literal (string "secondary")))))))))
(annotation
(ty-fn (effectful false)
(ty-lookup (name "Color") (local))
(ty-lookup (name "Str") (builtin)))))
(s-alias-decl
(ty-header (name "Color"))
(ty-tag-union
(ty-tag-name (name "Red"))
(ty-tag-name (name "Green"))
(ty-tag-name (name "Blue"))
(ty-tag-name (name "Yellow"))
(ty-tag-name (name "Orange"))
(ty-tag-name (name "Purple")))))
~~~
# TYPES
~~~clojure
(inferred-types
(defs
(patt (type "Color -> Str")))
(type_decls
(alias (type "Color")
(ty-header (name "Color"))))
(expressions
(expr (type "Color -> Str"))))
~~~