On Sep 8, 2009, at 4:36 AM, Carl Eastlund wrote:

On Mon, Sep 7, 2009 at 7:01 PM, Jacob Matthews<jac...@cs.uchicago.edu> wrote:
On Sun, Sep 6, 2009 at 3:14 PM, Robby
Findler<ro...@eecs.northwestern.edu> wrote:
Right. That wouldn't be parametric.

I think it's the contracts-don't-change-programs condition, not the
parametricity condition, that would be violated here.

-jacob

Don't these contracts already change the program?  I thought, since
Robby indicated that "stacks" cannot be used as lists, these contracts
would be wrapping the values in opaque structs for outside observers.
Adding or removing the contracts changes how a list-implemented stack
responds to list?.  Or have I misunderstood the behavior of #:exists
contracts?

They do in the sense that

 (if (pair? stack)
     (launch-nuclear-missile #:target 'hydep...@chicago)
     (printf "hello world"))

produces two different results if you remove #:exists naively.

I assume that Robby has a mechanism that says #:wrap-automatically
and is the 'replacement' of contracts in plain provide in order to
avoid the destruction of his neighborhood.

Thanks for reminding me of this. Sam and I had an example like this
that explained why we couldn't use plain polymorphic contracts to
control exports from Typed Scheme.

-- Matthias

_________________________________________________
 For list-related administrative tasks:
 http://list.cs.brown.edu/mailman/listinfo/plt-dev

Reply via email to