Okay. So I'll just start by spelling out the pieces of information that's there to be put into a message:
- is the contract blaming the party where the contract was written (or not) - the source location where the contract was written down - the contract, written out - the names of the two parties - a violation specific message with some details (ususally of the form "expected an <integer?>, got #f" or similar) The current error message uses that first thing as a conditional and has a different sentence for each of those cases. If someone besides me wants to take a stab at formulating a less painful message, the code is in collects/racket/contract/private/blame.rkt and, thanks to Stevie's refactoring, very easy to work with. Interesting test cases to try include using two modules with provide/contract (examples blaming both), a define/contract that is abused from the top of a module and a define/contract nested inside a define/contract. Robby On Fri, Dec 10, 2010 at 7:00 AM, Eli Barzilay <[email protected]> wrote: > 15 minutes ago, Robby Findler wrote: >> Positive suggestions for improvement are welcome. Bad analogies that >> don't help are like someone coming over to your house and hitting >> you with hammer before you even get a chance to have some coffee. > > I didn't even intend for this to be a (bad) analogy -- the thing that > makes it bad IMO is that the real meat (relevant source locations, the > contract that was broken) are drowned in legal verbiage. So replace > "looks like ... a contract" by "is ... a contract". (My reflective > fetish means that I like that they're so similar, but in this case > it's a bad property of the latter that is dragged to the former.) > > As for a suggestion, I don't have anything concrete (and I don't have > nearly enough contract experience to say something concrete) -- but in > general I prefer to see those important bits first, and the vague > human text later. > > >> On Fri, Dec 10, 2010 at 5:01 AM, Eli Barzilay <[email protected]> wrote: >> > 5 minutes ago, Casey Klein wrote: >> >> >> >> For anyone following at home, the change turns this message [...] >> > >> > Ah, so that's what broke enough tests to make the build log explode... >> > >> > >> >> into this one >> >> >> >> /Users/clklein/tmp/contract-violator.rkt:9.17: found a contradiction >> >> between the contract (-> any/c any/c any/c) on #:equiv argument of >> >> test--> for >> >> (file /Users/clklein/tmp/contract-violator.rkt) >> >> and its implementation; expected a procedure that accepts 2 mandatory >> >> arguments without any keywords, given: 1; to fix adjust either the >> >> contract or the implementation of >> >> (file /Users/clklein/tmp/contract-violator.rkt) >> > >> > (Not that my opinion should count for more than 5% of a vote, but this >> > is IMO pretty horrible. It makes it even more difficult to get to the >> > important details, by wrapping them in text that looks like ... a >> > contract. Feels like the same annoying thing of digging through 10 >> > pages of a rent contract for the few places that list how you're being >> > robbed.) > > -- > ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: > http://barzilay.org/ Maze is Life! > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev

