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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.