请在Clojure 2024状态调查问卷中分享您的想法!

欢迎!请参阅关于页面,以了解更多关于如何使用本网站的信息。

0票数
core.typed
h1. 问题

HVec 的谓词生成不支持统一变量参数。


((t/pred (t/HVec [(t/Value :foo) t/Keyword *])) [:foo :bar])
CompilerException clojure.lang.ExceptionInfo: Internal Error (*cider-repl service*:97:17) :Protocol not supported in type->pred: * {:type-error :clojure.core.typed.errors/internal-error, :env {:line 97, :column 17, :file "*cider-repl service*", :ns spark.dev.repl}}, compiling:(*cider-repl service*:97:17)


h1. 解决方案

这似乎是 {{*}} 没有正确解析的迹象。

首先,{{HVec}} 明显忽略了变量参数[当它们被解析时|https://github.com/clojure/core.typed/blob/0947387913babb0e8db52b560a3c0e42b45cb40b/module-rt/src/main/clojure/clojure/core/typed/parse_ast.clj#L249-L275].

这实际上在 quoted HVec 类型 Like '[Foo Bar *] [这里|https://github.com/clojure/core.typed/blob/0947387913babb0e8db52b560a3c0e42b45cb40b/module-rt/src/main/clojure/clojure/core/typed/parse_ast.clj#L344-L345]

此更改应解决问题;合同生成已经适用于 quoted HVec,因为它期望一个 [其余条目|https://github.com/clojure/core.typed/blob/0947387913babb0e8db52b560a3c0e42b45cb40b/module-rt/src/main/clojure/clojure/core/typed/type_contract.clj#L81-L86]],

*Pull request*
*Commit*
*Version*

3 答案

0票数

评论由: ambrosebs 发布

错误有点奇怪。这可能是 {{t/Keyword}} 在这里出了问题。

请尽力隔离这个错误。

0票数
作者:

评论由: ambrosebs 发布

哦,我看到了问题。无法解析名为 ** 的协议!

0票数
作者:
参考资料:https://clojure.atlassian.net/browse/CTYP-306(由 alex+import 报告)
...