Hi Carlo thanks for you reply...
Quoted from clojure.org/reference/protocols:
/Avoid the 'expression problem' by allowing independent extension of
the set of types, protocols, and implementations of protocols on
types, by different parties./
What you said about protocol extensions being global directly
contradicts the above. You can definitely extend the same protocol on
the same type in multiple namespaces (i.e. independent extension by
different parties). If extensions were global that would be no different
than monkey-patching, right?
Now, you ask why I need the protocol in the first place. That's to
provide polymorphism for bytes/chars/String input. The multi-method is
there to provide polymorphism for all the different hashing
implementations (bcrypt/scrypt/pbkdf2/argon2). These two are completely
separate and shouldn't interfere.
On 22/11/2019 21:06, Carlo Zancanaro wrote:
Hey Dimitris,
I think what you're running into here is a fundamental
misunderstanding of protocols. Specifically, this is not true:
As I understand it, protocol extensions are namespace-specific.
In Clojure, protocol extensions are global. If you extend a protocol
for a type then it doesn't matter which namespace calls the protocol
function, it only matters what type the function is called on.
Protocols are approximately interfaces in Java, except they can have
implementations added to existing types at runtime.
With your current code, I am a little bit confused why you want to use
a protocol. You have a multimethod which performs dispatch based on a
key, but which then calls the same protocol function for each dispatch
value - why not just call the appropriate function in the right
namespace? The protocol seems to be attempting to add a second level
of indirection, but it's not clear to me how or why that is useful.
Carlo
--
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.
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojure/91b87bf5-8277-53e7-ae63-4b634c6e2b60%40gmail.com.