core.typed用于嵌套Vecs

时间:2015-04-10 13:21:57

标签: clojure nested clojure-core.typed

我正在尝试为此数据结构定义类型定义:

[[:id :int :null false :pk true :autoinc true]
[:fooname [:varchar 40] :null false]
[:age :int :null false]]

然后我有一个过滤函数,它删除包含:id的每个向量作为第一个元素,如下所示:

(defn filter-id-columns [l]
  (remove #(= :id (first %)) l))

但是,无论我尝试什么,我总会得到这样的类型错误:

Type Error (leiningen/code_generator.clj:23:19) Polymorphic function first could not be applied to arguments:
Polymorphic Variables:
x

Domains:
(t/HSequential [x t/Any *])
(t/Option (t/EmptySeqable x))
(t/NonEmptySeqable x)
(t/Option (clojure.lang.Seqable x))

Arguments:
t/Any

Ranges:
x :object {:path [(Nth 0)], :id 0}
nil
x
(t/Option x)

in: (first p1__27917#)
in: (first p1__27917#)

我知道我为输入参数提供了错误的类型,但是,我找不到合适的东西。

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

功能参数默认为Any。您必须扩展本地函数定义,如下所示:(t/fn [x :- (U nil (Seqable Any))] ...)