Why don't you see whether it jives with TR? That would be a nice reproducability study.
On Sep 29, 2014, at 4:32 PM, Benjamin Greenman <[email protected]> wrote: > Could Andrew Myer's work on masked types (to eliminate nulls for object > initialization) be relevant? > http://www.cs.cornell.edu/Projects/jmask/ > > On Mon, Sep 29, 2014 at 3:30 PM, Matthias Felleisen <[email protected]> > wrote: > > I guess the real problem is to create suitable default values so > that the pass the type checker or to figure out a cast that forces > TR to accept some other value as the default value (and making sure > you never use the object). > > Undefined not completely solved. Argh. -- Matthias > > > > > > On Sep 29, 2014, at 12:52 PM, Sam Tobin-Hochstadt <[email protected]> > wrote: > > > Ah, if you want to create truly cyclic structure with no base case > > like this, then you'll have to do more work. Either you'll need to > > expand the type of the `x` field in `foo` to allow an initial value, > > or you'll need to create a dummy `foo` with that extended type, and > > then copy the cyclic data once you've created it to a new version of > > `foo`, using hash tables to track cycles. That's basically how > > `shared` works, although I haven't tried implementing it in TR and it > > might not be possible. > > > > Sam > > > > On Mon, Sep 29, 2014 at 12:33 PM, Konrad Hinsen > > <[email protected]> wrote: > >> Sam Tobin-Hochstadt writes: > >> > >>> I recommend doing the mutation yourself, and not using `shared`. > >>> That's the most obvious solution. > >> > >> Not for me, unfortunately, but probably I am missing something > >> obvious. > >> > >> Here's explicit mutation in untyped Racket: > >> > >> #lang racket > >> > >> (struct foo (x) #:mutable) > >> (struct bar (x)) > >> > >> (define f (foo (void))) > >> (define b (bar f)) > >> (set-foo-x! f b) > >> > >> (eq? (bar-x b) f) > >> (eq? (foo-x f) b) > >> > >> That works fine. Moving to Typed Racket, this is rejected by the type > >> checker because (void) is of type Void. Since I need a bar to make a > >> foo and a foo to make a bar, I don't see how I can ever initialize my > >> foo structure. > >> > >>> The reason that your `require/typed` doesn't work is that it creates > >>> new versions of the placeholder functions, but those aren't the ones > >>> that `shared` uses internally, so Typed Racket doesn't use the types > >>> you've given. > >> > >> That makes sense, thanks for the explanation! > >> > >> Konrad. > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > ____________________ Racket Users list: http://lists.racket-lang.org/users

