【发布时间】:2014-02-11 00:59:17
【问题描述】:
我想让clojure.core.typed 类型检查通过,但我遇到了一个我不理解的类型错误。
我的问题是:
- 以下错误是什么意思?
- 我该如何解决?
这是我的代码(我意识到这是不正确的):
(ns clj.util.map
(:require [clojure.core.typed :as t]))
(t/ann map-vals
(All [k v1 v2]
(Fn [ (Fn [(t/Option v1) -> (t/Option v2)])
(t/Option (t/Map k v1)) ->
(t/Option (t/Map k v2)) ])))
(defn map-vals
;; FIXME: Incorrect code
"Apply a function to each of the values in a map, returning the updated map."
[f hm]
(t/doseq> [k :- Any (keys hm)]
(assoc hm k (f (get hm k)))))
这是lein typed check clj.util.map的输出:
Initializing core.typed ...
"Elapsed time: 6697.604 msecs"
core.typed initialized.
Start collecting clj.util.map
Finished collecting clj.util.map
Collected 1 namespaces in 6851.111 msecs
Start checking clj.util.map
Checked clj.util.map in 968.041 msecs
Checked 1 namespaces (approx. 21 lines) in 7823.552 msecs
Type Error (clj.util.map:14:23) Polymorphic function clojure.core/keys could not be applied to arguments:
Polymorphic Variables:
k
Domains:
(t/Map k Any)
Arguments:
(t/Option (t/Map k v1))
Ranges:
(t/Seq k) :object {:path [Keys], :id 0}
in: (clojure.core/keys hm)
in: (clojure.core/seq (clojure.core/keys hm))
Type Checker: Found 1 error
Found errors
Subprocess failed
【问题讨论】:
标签: types clojure clojure-core.typed