From ade9b0a0f19adff46183055babca333f71d87ace Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 8 Jun 2021 09:26:10 +0200 Subject: [PATCH] map-embeddeds --- .../racket/preserves/preserves/embedded.rkt | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/implementations/racket/preserves/preserves/embedded.rkt b/implementations/racket/preserves/preserves/embedded.rkt index 83c5984..6ef6f40 100644 --- a/implementations/racket/preserves/preserves/embedded.rkt +++ b/implementations/racket/preserves/preserves/embedded.rkt @@ -1,5 +1,24 @@ #lang racket/base -(provide (struct-out embedded)) +(provide (struct-out embedded) + map-embeddeds) + +(require racket/match) +(require racket/set) +(require racket/dict) +(require "record.rkt") +(require "annotation.rkt") (struct embedded (value) #:transparent) + +(define (map-embeddeds f) + (define (walk v) + (match v + [(embedded v) (f v)] + [(annotated anns srcloc item) (annotated (map walk anns) srcloc (walk item))] + [(record label fields) (record (walk label) (map walk fields))] + [(? list? vs) (map walk vs)] + [(? set? vs) (for/set [(v (in-set vs))] (walk v))] + [(? dict? vs) (for/hash [((k v) (in-dict vs))] (values (walk k) (walk v)))] + [other other])) + walk)