On Mon, Aug 23, 2010 at 6:12 PM, Neil Toronto <[email protected]> wrote: > Sam Tobin-Hochstadt wrote: >> In general, `define:' and `let:' require return types since they >> define (potentially) recursive functions, and therefore a type needs >> to be given to the function, which wouldn't be known without >> typechecking the body, which could reference the function. This is >> also why `for/list:' needs a return type annotation - it's expanding >> into a `let loop' underneath. > > Ahhh, okay. My loops destructively update a newly allocated vector (or other > array model) and iterate over one or more Nonnegative-Fixnum indexes. The > loops they expand to always have type Nonnegative-Fixnum or similar.
In that case, you can probably insert the annotation yourself in a macro, if it's generated (such as with your `forall' macros). In other cases, I don't have much help to offer. >>> - Polymorphic structs being proper subtypes of their parent structs >>> would >>> be really nice. As it is, I can't figure out how to cleanly have a >>> "(vector-array T)" subtype of "(array T)" that gives private array >>> functions >>> access to the vector backing an array. If I had that, I could collapse >>> compositions of certain array ops at runtime and remove some duplicate >>> bounds checks. >> >> I'm not sure exactly what you mean here. Can you give an example? > > Yep. Here's the array type: [helpful example elided] Hmm. I see why this doesn't work currently. A workaround would be to use unions rather than struct subtyping, here, but I'll try to make this work. If you could submit a bug report, that would help. -- sam th [email protected] _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users

