Currently, _IWithMeta_ is implemented for functions by wrapping the function in a _MetaFn_ type.
However, this breaks certain expectations about the _typeof_ of the meta-fied value:
(defn Foo [_] "bar")
(goog/typeOf Foo)
;; => "function"
(goog/typeOf (with-meta Foo {:bar "baz"}))
;; => "object"
The primary case when this is not ideal is when interoping with JS code that does checks using _typeof_, like React does:
(react-is/isValidElementType Foo)
;; => true
(react-is/isValidElementType (with-meta Foo {:bar "baz"}))
;; => false
Ideally, _with-meta_ would preserve the _typeof_ value when possible.