Add bind/bind* to smart-pattern

This commit is contained in:
Tony Garnock-Jones 2024-05-17 16:36:42 +02:00
parent ba869b5cb6
commit 35b94db883
1 changed files with 4 additions and 0 deletions

View File

@ -7,11 +7,13 @@
arr
dict
discard
bind
rec*
arr*
dict*
discard*
bind*
literal->literal-pattern
literal-pattern->literal
@ -46,11 +48,13 @@
(define (arr pats) (Pattern-group (GroupType-arr) (items->entries pats)))
(define (dict pats) (Pattern-group (GroupType-dict) pats))
(define (discard) (Pattern-discard))
(define (bind [pat (discard)]) (Pattern-bind pat))
(define (rec* label pats) (rec 'group (list (rec 'rec (list (lit label))) (dict (items->entries pats)))))
(define (arr* pats) (rec 'group (list (rec 'arr (list)) (dict (items->entries pats)))))
(define (dict* pats) (rec 'group (list (rec 'dict (list)) (dict pats))))
(define (discard*) (rec '_ (list)))
(define (bind* [pat (discard)]) (rec 'bind (list pat)))
(define (literal->literal-pattern v)
(let walk ((v (->preserve v)))