On Fri, Nov 25, 2011 at 9:13 AM, Sam Tobin-Hochstadt <sa...@ccs.neu.edu> wrote: > On Fri, Nov 25, 2011 at 9:58 AM, Robby Findler > <ro...@eecs.northwestern.edu> wrote: >> Why can't you use contracts to do this kind of thing? > > First, `cms->list' has to return a `(Listof Any)' because arbitrary > code on the stack can add to the mark set. > > In the other direction, what would the contract on `w-c-m' be? The > second argument is an arbitrary value, so it's wrapped with the > contract that's generated for `Any', which needs those `Typed Value' > wrappers. Perhaps it could make use of some more type information at > this point in special cases where that's available; I'll look into > that.
Sorry-- I'm saying that you could let typed-racket programmers say "This value (that I happened to just get out of cms->list) has type 'Integer -> Integer'." and use contracts to enforce that. (I believe they can already do that if they make a new module that contains an identity function with an appropriate type but providing them a more convenient way to do it seems worthwhile for situations like this.) FWIW, working out a type system that could reason able the dynamic context of a call to cms->list (and thus get more type information) seems difficult. Perhaps this is one of those situations where contracts are the right choice? Robby _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users