On May 30, 2009, at 3:46 PM, Jay McCarthy wrote:
here is a contract error, which I believes illustrates the
"pressure of
contracts" conjecture:
Making Web pages in /Users/matthias/0Unison/0Web/107-f08/
(file "/Users/matthias/plt/collects/xml/private/reader.ss") broke
the
contract
(->
(or/c location? symbol? #f)
(or/c location? symbol? #f)
symbol?
(or/c permissive/c string?)
attribute?)
on make-attribute; not in permissive mode
So this seems to mean a (permissive? #t) is missing from
reader.ss. I added
it and 'it works now' but I don't think that's the proper way to
go about
it.
I don't know what the pressure of contracts is, but the XML parameter
permissive? is basically only used by the XML tool in DrScheme to put
the special Scheme boxes inside of the XML behind the XML box. You
should put it in _your_ code, not the XML collection if you need it to
be in permissive mode
--> Robby explained the principle, so let me apply it to this situation:
I wrote a script that traverses a large directory tree and dynamically
requires an index.ss files in each directory if it finds one. I am
guessing this means two or three dozen files of between 100 and 500
lines of code. One of those invocations raised an error and blamed
your module.
My conjecture was what you responded with. Somehow I should set the
permissive flag when the xml library is required. BUT nevertheless
the way you wrote the contract, you got blamed, meaning you should
protect your library better with an "entry" contract so that your
"exit" contract doesn't trigger the exception.
--> I naturally first looked up permissive (and was surprised to
find something). Then I ran (permissive? #t) in the module that
requires yours --- but the contract failure didn't go away. So I
moved that expression to your module and voila things went thru.
I do not know what went wrong with setting the permissive parameter
in my module. And I don't have time to find out.
--> One minor thing: I suggest not using a "?" at the end of the
name for a parameter. ? suggests a predicate and it's difficult
to get used to the idea that it isn't. -- Matthias
_________________________________________________
For list-related administrative tasks:
http://list.cs.brown.edu/mailman/listinfo/plt-dev