[racket-dev] [plt] Push #21701: master branch updated
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 <eli at barzilay.org> 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 <eli at barzilay.org> 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!
>