I think it has been rehashed often and core is very conservative about changes, but the current latest and greatest for improving many kinds of errors is going to be clojure.spec, which runs parallel to the actual execution path, so as not to effect things like performance or old code that depends on the specific weird behaviors in core. http://clojure.org/guides/spec
On Mon, Dec 5, 2016 at 8:28 PM <p...@pwjw.com> wrote: > Hi! > > Boy I really think you've all done a nice job with Clojure. I've used > quite a few environments over the years and clojure + CIDER + etc is a > great experience. The immutability and threading are smart. I've been able > to finish a hobby project in clojure which I've been mulling for a long > time and never found the right environment. Super stuff. > > And the error messages are not good. > > So I was wondering: Is this a philosophical thing? Or is it an effort > thing? And if it is an effort thing, is there some sort of plan for what > effort to put in? And if so, can I help by closing tickets? > > Here's one, for instance, which bugs me (using a build of branch master in > clojure from github just now) > > user=> (+ 1 1) > > 2 > > user=> (1 + 1) > > ClassCastException java.lang.Long cannot be cast to clojure.lang.IFn > user/eval17 (NO_SOURCE_FILE:10) > > > > > OK but what sort of noob would actually type in 1 + 1? (That's a joke. > Lots of people would. And I do sometimes when switching between java and > clojure) But that same error pops up if you misalign in parenthesis or > confuse an argument order or do a variety of other things. > > And that error message is terrible. I mean I know why it is there. Clojure > needs the first element of a list be the function position and 1 is not a > function, it is a long. But you have to squint rather generously at that > message to get to the problem. Or just learn what that message "really" > means, which seems a bit unfriendly. > > And so when I go look inside the source > > user=> (print-stack-trace *e 20) > > java.lang.ClassCastException: java.lang.Long cannot be cast to > clojure.lang.IFn > > at user$eval9.invokeStatic (NO_SOURCE_FILE:6) > > user$eval9.invoke (NO_SOURCE_FILE:6) > > clojure.lang.Compiler.eval (Compiler.java:6978) > > clojure.lang.Compiler.eval (Compiler.java:6941) > > > > Compiler.java has > > IFn fn = (IFn) fexpr.eval(); > > return fn.invoke(); > > > Which of course throws a class cast exception. > > > But there's so much information right there. Imagine this (in pseudo-code) > as > > > Object f = fexpr.eval(); > > if (f instanceof IFn) return (IFn)f.invoke() > > else throw ClojureNotAFunctionEvaluationError "First position in form at > line " ... " of environment " ... " is not a function object. You handed me > " + fexpr.first() " in form " ... " which has type " fexpr.first().class() > " and value " fexpr.first().toString() > > > or whatever (like maybe don't toString values - that's why you'd want a > plan. And maybe use a string table so you can internationalize. Again, plan > :) ) > > > so I almost want to whack this sort of stuff into a local copy as I hit > error messages which bug me, but that seems foolish. And anyway I'm new > here. > > > Sorry if I have accidentally stepped into some sort of landmine or if this > has been rehashed a million times. > > > But I figured, in the spirit of being willing to help if there's help to > be applied, I would ask if there's some sort of thinking on this topic for > 1.9.1 or 1.10 or something? > > > Thanks > > > Paul > > -- > 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. > For more options, visit https://groups.google.com/d/optout. > -- 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. For more options, visit https://groups.google.com/d/optout.