IMO, a better approach for disabling contracts is to have the client decide whether it wants the contracted version or the plain one -- which is a rough mirror of how unsafe operations are done (with the choice being made by requiring one file or another). Then, there could be a facility that associates a safe identifier with an unsafe version, so you could write (unsafe foo) -- which will be the unsafe operation for builtins that have one, and in case of a contracted function it will be the uncontracted one.
(Finally, there could be a "sub-namespace" facility where an identifier can have multiple bindings, and (unsafe foo) would actually expand to the unsafe sub-binding. This is a solution to a bunch of other things that are hard to get at the moment, like match pattern identifiers and more.) -- ((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