Fiasco with splicing-syntax-parameterize
This commit is contained in:
parent
56fdfaeb8f
commit
f7b1db0e3c
|
@ -1,23 +1,55 @@
|
|||
#lang typed/racket
|
||||
|
||||
(require ;"graph-6-rich-returns.lp2.rkt"
|
||||
(except-in "../lib/low.rkt" ~>)
|
||||
"graph.lp2.rkt"
|
||||
"get.lp2.rkt"
|
||||
"../type-expander/type-expander.lp2.rkt"
|
||||
"../type-expander/multi-id.lp2.rkt"
|
||||
"structure.lp2.rkt" ; debug
|
||||
"variant.lp2.rkt" ; debug
|
||||
"fold-queues.lp2.rkt"; debug
|
||||
"rewrite-type.lp2.rkt"; debug
|
||||
"meta-struct.rkt"; debug
|
||||
racket/splicing; debug
|
||||
racket/stxparam; debug
|
||||
(for-syntax syntax/parse)
|
||||
(for-syntax syntax/parse/experimental/template))
|
||||
(except-in "../lib/low.rkt" ~>)
|
||||
"graph.lp2.rkt"
|
||||
"get.lp2.rkt"
|
||||
"../type-expander/type-expander.lp2.rkt"
|
||||
"../type-expander/multi-id.lp2.rkt"
|
||||
"structure.lp2.rkt" ; debug
|
||||
"variant.lp2.rkt" ; debug
|
||||
"fold-queues.lp2.rkt"; debug
|
||||
"rewrite-type.lp2.rkt"; debug
|
||||
"meta-struct.rkt"; debug
|
||||
racket/splicing; debug
|
||||
racket/stxparam; debug
|
||||
(for-syntax syntax/parse)
|
||||
(for-syntax syntax/parse/experimental/template))
|
||||
|
||||
(define-rename-transformer-parameter ~>aaa
|
||||
(make-rename-transformer #'+))
|
||||
|
||||
(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)]
|
||||
[(m-city [c : (Listof (Pairof String String))])
|
||||
(City (remove-duplicates (map (curry m-street c) (cdrs c)))
|
||||
|
|
|
@ -50,8 +50,8 @@
|
|||
(begin
|
||||
(define-type-expander
|
||||
(first-step-expander1 stx)
|
||||
#'Number
|
||||
#;(syntax-parse
|
||||
#;#'Number
|
||||
(syntax-parse
|
||||
stx
|
||||
((_ (~datum m-cities))
|
||||
(template
|
||||
|
@ -65,13 +65,17 @@
|
|||
(Listof (first-step #:placeholder Street)))))))
|
||||
(define-type-expander
|
||||
(first-step-expander2 stx)
|
||||
#'Number
|
||||
#;(syntax-parse
|
||||
#;#'Number
|
||||
(syntax-parse
|
||||
stx
|
||||
((_ (~datum m-cities)) #'(U m-cities3/node (Listof City)))
|
||||
((_ (~datum m-streets)) #'(U m-streets4/node (Listof Street)))))
|
||||
(splicing-syntax-parameterize
|
||||
((~> (make-rename-transformer #'first-step-expander1)))))
|
||||
(splicing-let-syntax
|
||||
([~> (make-rename-transformer #'first-step-expander1)])
|
||||
(define-graph-rest))
|
||||
#;(splicing-syntax-parameterize
|
||||
((~> (make-rename-transformer #'first-step-expander1)))
|
||||
(define-graph-rest)))
|
||||
(City
|
||||
(streets : (Let (~> first-step-expander2) (~> m-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.
|
||||
|
||||
@chunk[<wrapping-first-step>
|
||||
(splicing-syntax-parameterize
|
||||
([define-graph-rest
|
||||
(syntax-rules () ;; TODO: indentation bug here in v 6.4.0.8
|
||||
[(_) #';(splicing-syntax-parameterize
|
||||
(begin
|
||||
(define-syntax (call-second-step stx)
|
||||
(syntax-local-introduce
|
||||
#'<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])
|
||||
<call-second-step>])]);)])])
|
||||
wrapping-extra-definitions)]
|
||||
;<call-second-step>;)])])
|
||||
wrapping-extra-definitions))]
|
||||
|
||||
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