commit 4b9d7cba226f0df93cf9e283443d61324749cd67
parent a103d48aaf2a88c085fd5effa68c4f221c2aadd9
Author: Georges Dupéron <georges.duperon@gmail.com>
Date: Thu, 10 Nov 2016 17:37:16 +0100
Attempt to make it work without metafunctions, but I think it's going to be difficult to use
Diffstat:
4 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/test/test-traversal-1.rkt b/test/test-traversal-1.rkt
@@ -1,6 +1,6 @@
#lang type-expander
-(require "../traversal.hl.rkt"
+(require "traversal-util.rkt" ;"../traversal.hl.rkt"
"ck.rkt")
(define-type Foo (Listof String))
diff --git a/test/test-traversal-2.rkt b/test/test-traversal-2.rkt
@@ -1,6 +1,6 @@
#lang typed/racket
-(require "../traversal.hl.rkt"
+(require "traversal-util.rkt" ;"../traversal.hl.rkt"
type-expander
phc-adt
"ck.rkt"
diff --git a/test/traversal-util.rkt b/test/traversal-util.rkt
@@ -0,0 +1,22 @@
+#lang typed/racket
+(require (for-syntax syntax/parse
+ syntax/parse/experimental/template
+ type-expander/expander)
+ "../traversal.hl.rkt")
+
+(provide define-fold)
+
+(define-syntax define-fold
+ (syntax-parser
+ [(_ _function-name:id
+ _type-name:id
+ whole-type:type
+ _type-to-replaceᵢ:type ...)
+ (with-folds
+ (λ ()
+ (template
+ (begin
+ (define-type _type-name
+ (∀-replace-in-type whole-type _type-to-replaceᵢ ...))
+ (define _function-name
+ (λ-replace-in-instance whole-type _type-to-replaceᵢ ...))))))]))
+\ No newline at end of file
diff --git a/traversal.hl.rkt b/traversal.hl.rkt
@@ -389,7 +389,7 @@ where @racket[foldl-map] is defined as:
(for-meta 2 phc-toolkit/untyped)
(for-meta 2 syntax/parse))
- (provide define-fold
+ (provide with-folds
(for-syntax replace-in-instance)
(for-syntax replace-in-type))
<foldl-map>