Scheme 无法与键入的球拍使用同步

Scheme 无法与键入的球拍使用同步,scheme,racket,typed-racket,Scheme,Racket,Typed Racket,嗨,我正在学习如何使用racket提供的伐木设备。我写了下面的一段代码来了解事情是如何运作的 #lang racket (define list-logger (make-logger 'list-logger)) ;;(: log-debug (String Symbol -> Void)) (define (log-debug message name) (log-message list-logger 'debug message name)) ;;(: sum-a-lis

嗨,我正在学习如何使用racket提供的伐木设备。我写了下面的一段代码来了解事情是如何运作的

#lang racket

(define list-logger (make-logger 'list-logger))

;;(: log-debug (String Symbol -> Void))
(define (log-debug message name)
  (log-message list-logger 'debug message name))

;;(: sum-a-list ((Listof Integer) (Integer Integer -> Integer) -> Integer))
(define (sum-a-list l operator)
  (begin (log-debug (format "Message ~a" l) 'sum-a-list)
         (cond [(empty? l) 0]
         [else (operator (first l) (sum-a-list (rest l) operator))])))

(define recevier (make-log-receiver list-logger 'debug))

;;(: main (-> Any))
(define (main)
  (begin (sum-a-list (list 1 2 3 4 5 6 7 8) +)
         ;; (: logger (-> Any)
         (define (logger)
           (let ([msg (sync recevier)])
             (match msg
               [(vector level m data x) (begin (printf "~a: ~a\n" level m)
                                               (logger))]
               [else #f ])))
         (logger)))
上面的代码可以编译并运行良好。当我用打字球拍代替球拍时,问题就出现了。对于相同的代码(带有类型注释和类型/racket),我得到了一个类型检查器错误

;; code with typed racket and type annotations
#lang typed/racket

(define list-logger (make-logger 'list-logger))

(: log-debug (String Symbol -> Void))
(define (log-debug message name)
  (log-message list-logger 'debug message name))

(: sum-a-list ((Listof Integer) (Integer Integer -> Integer) -> Integer))
(define (sum-a-list l operator)
  (begin (log-debug (format "Message ~a" l) 'sum-a-list)
         (cond [(empty? l) 0]
         [else (operator (first l) (sum-a-list (rest l) operator))])))

(define recevier (make-log-receiver list-logger 'debug))

(: main (-> Any))
(define (main)
  (begin (sum-a-list (list 1 2 3 4 5 6 7 8) +)
         (: logger (-> Any))
         (define (logger)
           (let ([msg (sync recevier)])
             (match msg
               [(vector level m data x) (begin (printf "~a: ~a\n" level m)
                                               (logger))]
               [else #f ])))
         (logger)))

;; type checker error: Type Checker: untyped identifier sync imported from module <typed/racket> in: sync
;;带有类型化球拍和类型注释的代码
#朗文/球拍
(定义列表记录器(创建记录器的列表记录器))
(:日志调试(字符串符号->无效))
(定义(日志调试消息名称)
(日志消息列表记录器的调试消息名称))
(:sum-a-list((整型列表)(整型整型->整型)->整型))
(定义(sum-a-list l运算符)
(开始(日志调试(格式为“Message~a”l)“sum-a-list”)
(条件[(空?l)0]
[else(运算符(第一个l)(总和列表(剩余l)运算符))))
(定义接收器(使日志接收器列表记录器调试))
(:主(->任何))
(定义(主)
(开始(汇总列表(列表1 2 3 4 5 6 7 8)+)
(:记录器(->任何))
(定义(记录器)
(让([msg(同步接收器)])
(搭配味精)
[(向量级别m数据x)(开始(打印“~a:~a\n”级别m)
(记录器))]
[else#f]))
(记录器)
;; 类型检查器错误:类型检查器:从模块中导入的非类型标识符同步:同步

我想在我的项目中使用类型化的racket来实现日志记录支持。我不知道如何解决这个错误。请帮我解决这个问题。谢谢

更新:
sync
现在作为Racket版本6.0的一部分,在当前版本的Typed Racket中受支持


由于不支持事件类型,因此类型化Racket的任何发行版本都不支持本机的
sync
功能。如果您下载了Racket的最新预发布版本(或从或),则应获得支持事件和
sync
的键入Racket版本


警告:预发布版本更可能有bug。欢迎Bug报告

更新:
sync
现在作为Racket版本6.0的一部分,在当前版本的Typed Racket中受支持


由于不支持事件类型,因此类型化Racket的任何发行版本都不支持本机的
sync
功能。如果您下载了Racket的最新预发布版本(或从或),则应获得支持事件和
sync
的键入Racket版本

警告:预发布版本更可能有bug。欢迎Bug报告