类型化Racket中的Racket泛型图库

类型化Racket中的Racket泛型图库,racket,typed-racket,Racket,Typed Racket,我试图在TypedRacket中使用泛型图库,方法是使用require/typed导入它,但我不断收到这些奇怪的长错误。是否有人设法让类型检查器与泛型图库协作 #lang打字/拍子 (需要/键入图形) [#:不透明图形?] [未加权图/无向((列表的(任何列表))->图] [添加边!(图形任意->无效)]) (定义g:图(无权图/无向’((12)(13))) (添加边!g 2 3) graph?:违反合同 any wrap/c:无法保护作为“any”传递的不透明值` 价值:# 此警告将在将来的

我试图在TypedRacket中使用泛型图库,方法是使用
require/typed
导入它,但我不断收到这些奇怪的长错误。是否有人设法让类型检查器与泛型图库协作

#lang打字/拍子
(需要/键入图形)
[#:不透明图形?]
[未加权图/无向((列表的(任何列表))->图]
[添加边!(图形任意->无效)])
(定义g:图(无权图/无向’((12)(13)))
(添加边!g 2 3)
graph?:违反合同
any wrap/c:无法保护作为“any”传递的不透明值`
价值:#
此警告将在将来的版本中成为错误。
in:的第一个参数
或/或的一部分
(或)
结构谓词过程?/c
(->任何布尔值?)
合同来源:(图形界面?)

这并不理想,但有一个解决办法:

#lang打字/拍子
(模块包装器)球拍
(提供图?未加权图/无向添加边!)
(需要(g中的前缀:图形))
(struct-graph[g]);struct生成谓词
(定义(未加权图/无向es);换行输出图
(图(g:未加权图/无向es)))
(定义(添加边!g a b);展开输入图形
(g:添加边!(图g)a b)
(需要/键入“包装器”
[#:不透明图形?]
[未加权图/无向((列表的(任何列表))->图]
[添加边!(图形任意->无效)])
(定义g:图(无权图/无向’((12)(13)))
(添加边!g 2 3)
当输入的Racket
require/Typed
看到
#:不透明
时,它仍然需要将您给出的谓词
graph?
视为非类型代码。但它还需要使用非类型化代码中的谓词来保护类型化非类型化边界上的值。
graph?
谓词具有类型
(>Any Boolean)
,因此,当typed racket使用typed code中的值调用它时,它将使用类型
Any
传递它。但是,如果在此之前它有一个更具体的类型,其中包含必须键入的输入,那么它仍然需要防止非类型化代码以错误的方式“使用它”,或者提供错误的非类型化输入


添加一个不透明结构通过创建一个新的
图来避免这种情况?
谓词,它不需要以相同的方式“查看”值。

您的意思是
导入/键入
还是
需要/键入
?我很确定你指的是后者,但这可能是问题的原因?啊!我一直在使用
require/typed
import
是我的错别字。没有引起这些问题