www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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ᵢ ...))))))]))