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