Scheme 无法与键入的球拍使用同步
嗨,我正在学习如何使用racket提供的伐木设备。我写了下面的一段代码来了解事情是如何运作的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
#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报告