Nadeem Abdul Hamid <nad...@acm.org> writes: > Consider a beginner file with: > (define-struct boa (name length)) > > Student writes a template/function with parameter named "a-boa", but > misspells one occurrence, writing "boa" instead of "a-boa". > > (define (feed a-boa) > (make-boa (boa-name a-boa) > (boa-length boa))) > > Their tests then fail at runtime with: > boa-length: expects argument of type <struct:boa>; given (make-signature > ...) > > Why is "boa" as a type visible at all in the student languages? The > make-signature thing is really confusing, because they recognize it as > something like a constructor but they don't know what structure it > corresponds to.
This is my fault: We're working on something called "signatures", which can take the place of a contract comment, but is instead checked by the system. For example, one could write for the functions above: (: make-boa (string number -> boa)) (: boa-name (boa -> string)) (: boa-length (boa -> number)) (: feed (boa -> boa)) ^^^ This is why `boa' is available, and why you get output identifying "boa" as a signature. (Before the introduction of signatures, it would say "illegal use of syntax" - I'm not sure that's much better.) The work on signatures is not quite done yet (and undocumented ...), but we're working hard on completing it in the near future. -- Cheers =8-} Mike Friede, Völkerverständigung und überhaupt blabla _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev