类型球拍中的贪婪模式匹配

Greedy pattern matching in typed racket

我正在寻找匹配 typed/racket 中任意长度的模式列表。

我正在尝试做的一个简单示例是以下表达式:

(match '(1 2 3) [(list (? real? n) ...) n])

在无类型的球拍中,我希望得到以下结果:

'(1 2 3)

但是,类型检查器抛出以下错误:

`Type Checker: Error in macro expansion -- insufficient type information to typecheck. please add more type annotations in: (match (quote (1 2 3)) ((list (? real? n) ...) n))`

使用 ... 执行贪婪模式匹配时,提供类型信息的最佳方式是什么?

经过进一步实验,匹配的输出似乎需要一些与其关联的打字信息。例如以下作品:

((lambda (l) : Any
         (match l [(list (? real? n) ...) n]))
  '(1 2 3))