As a new developer to Clojure, coming from a strong Java/OO background
and NOT a functional one, I'd like to make a few observations.

One challenge to new developers are exception messages generated by
Clojure. I'm seeing a lot of ClassCastExceptions:

cribbage=> (sort-by card-order (take 11 deck))
java.lang.RuntimeException: java.lang.RuntimeException:
java.lang.ClassCastException: clojure.lang.Keyword (NO_SOURCE_FILE:0)

cribbage=> (.printStackTrace *e)
java.lang.ClassCastException: clojure.lang.LazyCons (NO_SOURCE_FILE:0)
        at clojure.lang.Compiler.eval(Compiler.java:4122)
        at clojure.lang.Repl.main(Repl.java:91)
Caused by: java.lang.ClassCastException: clojure.lang.LazyCons
        at clojure.nth__461.invoke(boot.clj:844)
        at cribbage.eval__3056.invoke(Unknown Source)
        at clojure.lang.Compiler.eval(Compiler.java:4111)
        ... 1 more
nil
cribbage=>

That's not a lot to go on; my eventual error was here:

(def face-card-order {:jack 11 :queen 12 :kind 13})

(defn card-order
  "Returns the sort ordering of the card, which is the rank, extended
with values for :jack, :queen
  and :king."
  [{rank :rank}]
  (or (face-card-order rank) rank))

(defn card-value
     "Returns point value of card, which ranges from 1 to 10 (for 10
and all face cards)."
     [{rank :rank}]
     (if (contains? face-card-order rank) 10 rank))


:king vs. :kind inside face-card-order, thus :king was returned (not
10) which cases a comparison error.

The point is, an exception that said something like:

"Expected java.lang.Comparable but received :king" would have helped
me unravel this much, much easier!

I have a lot of experience, inside Tapestry, on these kinds of issues:
useful exception reporting. A significant amount of Tapestry's code
base revolves around exception reporting, as does a
more-than-signficant amount of the test cases.

At the very least, I'd like to see a diagnostic with every
ClassCastException, identifying what was being cast (and perhaps why)
along with the expected type.

-- 
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind

--~--~---------~--~----~------------~-------~--~----~
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
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to