Fiasco with splicing-syntax-parameterize
This commit is contained in:
parent
56fdfaeb8f
commit
f7b1db0e3c
|
@ -1,23 +1,55 @@
|
||||||
#lang typed/racket
|
#lang typed/racket
|
||||||
|
|
||||||
(require ;"graph-6-rich-returns.lp2.rkt"
|
(require ;"graph-6-rich-returns.lp2.rkt"
|
||||||
(except-in "../lib/low.rkt" ~>)
|
(except-in "../lib/low.rkt" ~>)
|
||||||
"graph.lp2.rkt"
|
"graph.lp2.rkt"
|
||||||
"get.lp2.rkt"
|
"get.lp2.rkt"
|
||||||
"../type-expander/type-expander.lp2.rkt"
|
"../type-expander/type-expander.lp2.rkt"
|
||||||
"../type-expander/multi-id.lp2.rkt"
|
"../type-expander/multi-id.lp2.rkt"
|
||||||
"structure.lp2.rkt" ; debug
|
"structure.lp2.rkt" ; debug
|
||||||
"variant.lp2.rkt" ; debug
|
"variant.lp2.rkt" ; debug
|
||||||
"fold-queues.lp2.rkt"; debug
|
"fold-queues.lp2.rkt"; debug
|
||||||
"rewrite-type.lp2.rkt"; debug
|
"rewrite-type.lp2.rkt"; debug
|
||||||
"meta-struct.rkt"; debug
|
"meta-struct.rkt"; debug
|
||||||
racket/splicing; debug
|
racket/splicing; debug
|
||||||
racket/stxparam; debug
|
racket/stxparam; debug
|
||||||
(for-syntax syntax/parse)
|
(for-syntax syntax/parse)
|
||||||
(for-syntax syntax/parse/experimental/template))
|
(for-syntax syntax/parse/experimental/template))
|
||||||
|
|
||||||
|
(define-rename-transformer-parameter ~>aaa
|
||||||
|
(make-rename-transformer #'+))
|
||||||
|
|
||||||
(define-graph gr
|
(define-graph gr
|
||||||
#:wrapping-definitions (begin (define-graph-rest))
|
#:wrapping-definitions
|
||||||
|
(begin
|
||||||
|
(define-type-expander
|
||||||
|
(first-step-expander1 stx)
|
||||||
|
(syntax-parse
|
||||||
|
stx
|
||||||
|
((_ (~datum m-cities))
|
||||||
|
(template
|
||||||
|
(U
|
||||||
|
(first-step #:placeholder m-cities3/node)
|
||||||
|
(Listof (first-step #:placeholder City)))))
|
||||||
|
((_ (~datum m-streets))
|
||||||
|
(template
|
||||||
|
(U
|
||||||
|
(first-step #:placeholder m-streets4/node)
|
||||||
|
(Listof (first-step #:placeholder Street)))))))
|
||||||
|
(define-type-expander
|
||||||
|
(first-step-expander2 stx)
|
||||||
|
(syntax-parse
|
||||||
|
stx
|
||||||
|
((_ (~datum m-cities)) #'(U m-cities3/node (Listof City)))
|
||||||
|
((_ (~datum m-streets)) #'(U m-streets4/node (Listof Street)))))
|
||||||
|
;(define-syntax (g-rest stx) (syntax-local-introduce #'))
|
||||||
|
(splicing-let-syntaxes
|
||||||
|
()
|
||||||
|
(define-graph-rest))
|
||||||
|
#;(splicing-syntax-parameterize
|
||||||
|
();([~>aaa (make-rename-transformer #'first-step-expander1)])
|
||||||
|
(g-rest))
|
||||||
|
#;(define-graph-rest))
|
||||||
[City [streets : (Listof Street)] [people : (Listof Person)]
|
[City [streets : (Listof Street)] [people : (Listof Person)]
|
||||||
[(m-city [c : (Listof (Pairof String String))])
|
[(m-city [c : (Listof (Pairof String String))])
|
||||||
(City (remove-duplicates (map (curry m-street c) (cdrs c)))
|
(City (remove-duplicates (map (curry m-street c) (cdrs c)))
|
||||||
|
|
|
@ -50,8 +50,8 @@
|
||||||
(begin
|
(begin
|
||||||
(define-type-expander
|
(define-type-expander
|
||||||
(first-step-expander1 stx)
|
(first-step-expander1 stx)
|
||||||
#'Number
|
#;#'Number
|
||||||
#;(syntax-parse
|
(syntax-parse
|
||||||
stx
|
stx
|
||||||
((_ (~datum m-cities))
|
((_ (~datum m-cities))
|
||||||
(template
|
(template
|
||||||
|
@ -65,13 +65,17 @@
|
||||||
(Listof (first-step #:placeholder Street)))))))
|
(Listof (first-step #:placeholder Street)))))))
|
||||||
(define-type-expander
|
(define-type-expander
|
||||||
(first-step-expander2 stx)
|
(first-step-expander2 stx)
|
||||||
#'Number
|
#;#'Number
|
||||||
#;(syntax-parse
|
(syntax-parse
|
||||||
stx
|
stx
|
||||||
((_ (~datum m-cities)) #'(U m-cities3/node (Listof City)))
|
((_ (~datum m-cities)) #'(U m-cities3/node (Listof City)))
|
||||||
((_ (~datum m-streets)) #'(U m-streets4/node (Listof Street)))))
|
((_ (~datum m-streets)) #'(U m-streets4/node (Listof Street)))))
|
||||||
(splicing-syntax-parameterize
|
(splicing-let-syntax
|
||||||
((~> (make-rename-transformer #'first-step-expander1)))))
|
([~> (make-rename-transformer #'first-step-expander1)])
|
||||||
|
(define-graph-rest))
|
||||||
|
#;(splicing-syntax-parameterize
|
||||||
|
((~> (make-rename-transformer #'first-step-expander1)))
|
||||||
|
(define-graph-rest)))
|
||||||
(City
|
(City
|
||||||
(streets : (Let (~> first-step-expander2) (~> m-streets)))
|
(streets : (Let (~> first-step-expander2) (~> m-streets)))
|
||||||
((City1/simple-mapping (streets : (~> m-streets))) (City streets)))
|
((City1/simple-mapping (streets : (~> m-streets))) (City streets)))
|
||||||
|
|
5
graph-lib/graph/__DEBUG_graph6.txt
Normal file
5
graph-lib/graph/__DEBUG_graph6.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Attempts:
|
||||||
|
* (datum->syntax) Commit 876c4d2: works, but introduces ~> into the global scope
|
||||||
|
* (syntax-local-introduce) Does not work at all
|
||||||
|
* ((make-delta-introducer) (syntax-local-introduce)), see identifiers.ods and __DEBUG_graph6F.rkt: Works on normal identifiers (not sure?) but not for the graph (why?)
|
||||||
|
* splicing-syntax-parameterize Commit 56fdfae: splicing-syntax-parameterize messes up the scopes of its body
|
|
@ -355,13 +355,17 @@ When the user gave @tc[#:wrapping-definitions] instead of @tc[#:definitions], we
|
||||||
use syntax-parameterize to enable the @tc[(define-graph-rest)] form.
|
use syntax-parameterize to enable the @tc[(define-graph-rest)] form.
|
||||||
|
|
||||||
@chunk[<wrapping-first-step>
|
@chunk[<wrapping-first-step>
|
||||||
(splicing-syntax-parameterize
|
(begin
|
||||||
([define-graph-rest
|
(define-syntax (call-second-step stx)
|
||||||
(syntax-rules () ;; TODO: indentation bug here in v 6.4.0.8
|
(syntax-local-introduce
|
||||||
[(_) #';(splicing-syntax-parameterize
|
#'<call-second-step>))
|
||||||
|
(splicing-syntax-parameterize
|
||||||
|
([define-graph-rest
|
||||||
|
(syntax-rules () ;; TODO: indentation bug here in v 6.4.0.8
|
||||||
|
[(_) call-second-step])]);(splicing-syntax-parameterize
|
||||||
; ([define-graph-rest default-define-graph-rest])
|
; ([define-graph-rest default-define-graph-rest])
|
||||||
<call-second-step>])]);)])])
|
;<call-second-step>;)])])
|
||||||
wrapping-extra-definitions)]
|
wrapping-extra-definitions))]
|
||||||
|
|
||||||
The first step macro is defined as follows:
|
The first step macro is defined as follows:
|
||||||
|
|
||||||
|
|
BIN
graph-lib/graph/identifiers.ods
Normal file
BIN
graph-lib/graph/identifiers.ods
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user