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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.