Clojure 是否可以使用core.match添加对象的类型信息?

Clojure 是否可以使用core.match添加对象的类型信息?,clojure,clojure-core.typed,Clojure,Clojure Core.typed,当我在Scala中工作时,我喜欢在类型上进行模式匹配,并且类型检查器将使用该类型: val x : Any = "boop" x match { case y : String => do-something-stringy(y); case z : Int => .... etc } 我知道在core.typed中,条件将帮助类型检查器解析确切的类型。我尝试使用core.match复制此内容: (ann do-something-stringy [String ->

当我在Scala中工作时,我喜欢在类型上进行模式匹配,并且类型检查器将使用该类型:

val x : Any = "boop"
x match {
  case y : String => do-something-stringy(y);
  case z : Int => .... etc
} 
我知道在core.typed中,条件将帮助类型检查器解析确切的类型。我尝试使用core.match复制此内容:

(ann do-something-stringy [String -> String])
(defn do-something-stringy [message]
  (str "Hello " message))


;; Doesn't work
(ann do-things [Object -> String])
(defn do-things [foo]
  (match [(type foo)]
         [String] (do-something-stringy foo)
         :else "Nope"))
此操作失败并出现错误:

函数do something striny无法应用于参数:

域: 串

论据: 反对

范围: 串

使用预期类型: 串

有没有一种方法可以使用core.match使其正常工作


谢谢

尝试在
上分派,而不是
类型
。core.typed对
type
没有真正的支持,因为它在元数据方面很奇怪