(ns example
(:require [clojure.core.typed :as t]))
(t/ann failing-func (t/All [x]
(t/IFn ['{::foo x} -> x]
[t/Any -> nil])))
(defn failing-func [m]
(::foo m))
(t/ann passing-func (t/All [x]
(t/IFn ['{::foo x} -> x]
[(t/HMap :absent-keys #{::foo}) -> nil])))
(defn passing-func [m]
(::foo m))
(t/check-ns 'example)
Start collecting example
Finished collecting example
Collected 1 namespaces in 70.703239 msecs
Not checking clojure.core.typed (does not depend on clojure.core.typed)
Start checking example
Checked example in 19.525299 msecs
Checked 2 namespaces in 97.22153 msecs
Type Error (example.clj:8:3) Type mismatch:
Expected: nil
Actual: t/Any
in: (:example/foo m)
ExceptionInfo Type Checker: Found 1 error clojure.core/ex-info (core.clj:4593)