Hello folks! I have the following two clj files (I've tried to come up with a minimal example):
core.clj -------------- (ns spec-test.core (:require [clojure.spec :as s])) (defprotocol Game (move [game])) (s/def ::game1 #(satisfies? Game %)) (s/def ::game2 (partial satisfies? Game)) foo.clj -------------- (ns spec-test.foo (:require [spec-test.core :refer [Game]])) (defrecord Foo []) (extend-type Foo Game (move [game])) Here's a REPL session that explains my problem: ➜ spec-test lein repl WARNING: boolean? already refers to: #'clojure.core/boolean? in namespace: cider.inlined-deps.fipp.v0v6v4.fipp.visit, being replaced by: #'cider.inlined-deps.fipp.v0v6v4.fipp.visit/boolean? nREPL server started on port 58606 on host 127.0.0.1 - nrepl://127.0.0.1:58606 REPL-y 0.3.7, nREPL 0.2.12 Clojure 1.9.0-alpha14 Java HotSpot(TM) 64-Bit Server VM 1.8.0_92-b14 Docs: (doc function-name-here) (find-doc "part-of-name-here") Source: (source function-name-here) Javadoc: (javadoc java-object-or-class-here) Exit: Control+D or (exit) or (quit) Results: Stored in vars *1, *2, *3, an exception in *e user=> (ns spec-test.core) nil spec-test.core=> (require 'spec-test.core :reload) nil spec-test.core=> (require 'spec-test.foo :reload) nil spec-test.core=> (satisfies? Game (spec-test.foo/->Foo)) true spec-test.core=> ((partial satisfies? Game) (spec-test.foo/->Foo)) true spec-test.core=> (s/explain ::game1 (spec-test.foo/->Foo)) Success! nil spec-test.core=> (s/explain ::game2 (spec-test.foo/->Foo)) val: #spec_test.foo.Foo{} fails spec: :spec-test.core/game2 predicate: (partial satisfies? Game) <---- WAAAAAT nil I have no idea what is going on here, but it seems the `extend-type` is important. If I inline the Game protocol implementation in the defrecord, it works. Any ideas? Thanks, John -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.