7

In clojure, how do I type type hint a type that I have created? (I want to nest the types.)

e.g. I had thought that this would work:

(deftype A [#^somePrimitive someField]) (deftype B [#^A Avalue]) 

This brings up an error message:

Unknown location: error: java.lang.ClassNotFoundException: A 

Note: clojure types are a new feature which currently exists only in the 'new' branch of clojure.

Edit: I was confused by the different ways of type hinting in clojure for java and clojure types. java classes are hinted as

#^java.some.class 

while clojure types are hinted as:

#^:some.Namespace/type 

2 Answers 2

11

For each deftype, a type tag (basically a namespace-qualified keyword) is created so you don't have to AOT-compile your code before you can use the resulting class.

If type A is in the current namespace, you can write it like this:

(deftype B [^::A Avalue]) 

For types in other namespaces, qualify the keyword using its namespace:

(deftype B [^:user/A Avalue]) 
Sign up to request clarification or add additional context in comments.

Comments

3

(deftype B [#^:user/A Avalue]) works for me.

2 Comments

That seems to work, but then how would I do the same thing in other files? +1, anyhow.
Yup, I figured it out now. Thanks alot.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.