traversal-util.rkt (664B)
1 #lang typed/racket 2 (require (for-syntax stxparse-info/parse 3 stxparse-info/parse/experimental/template 4 type-expander/expander) 5 "../traversal.hl.rkt") 6 7 (provide define-fold) 8 9 (define-syntax define-fold 10 (syntax-parser 11 [(_ _function-name:id 12 _type-name:id 13 whole-type:type 14 _type-to-replaceᵢ:type ...) 15 (with-folds 16 (λ () 17 (template 18 (begin 19 (define-type _type-name 20 (!∀-replace-in-type whole-type _type-to-replaceᵢ ...)) 21 (define _function-name 22 (!λ-replace-in-instance whole-type _type-to-replaceᵢ ...))))))]))