Clojure 1.4でプリミティブ引数を使用してプロトコルを定義しようとしています(パフォーマンスに敏感なコードで不要なプリミティブボクシングを回避できるようにするため)。
(defprotocol A
(foo [a ^long x]))
(extend-type java.lang.String A
(foo [s ^long x] (.charAt s x)))
これは問題なく動作するように見えますが、使用しようとすると例外が発生して失敗します。
(foo "abracadarbra" 3)
=> ClassCastException XXXX cannot be cast to clojure.lang.IFn$OLO
私は何が間違っているのですか?