Re: compiler types: records / collections interaction
siiky via <[email protected]>
| Newsgroups | gmane.lisp.scheme.chicken |
|---|---|
| Message-ID | <[email protected]> |
Hi Al, > What combination of > > * define-record-type (srfi-9, srfi-99, chicken define-record, whatever) and > > * (declare type ...) > > can I use to inform the compiler that (for collections of myrec) vector- > ref returns myrec's (likewise list car/cdr, hash-table-ref)? And that it > needs not emit any instance-type-checking code for objects extracted > from such collections? For "native" Scheme types, there's at least `list-of` and `vector-of` [0]. The type definitions of car/cdr, vector-ref, etc are in the file types.db (you can find it at $PREFIX/lib/chicken/11/types.db). For other data-structures you have to look at the specific implementation. For example, SRFI-69 [1] mentions types in the changelog. They're not mentioned in the docs, however, so you'll have to dig through the code to confirm this. > Separately, how can I tell the compiler that fields in these records > have certain types? Add type declarations for the implicitly-defined > per-field accessors and mutators? To annotate the types of the fields of a record, take a look at defstruct[2]. There may be other alternatives, I only know of this one. [0] https://wiki.call-cc.org/man/5/Types#type-syntax [1] https://wiki.call-cc.org/eggref/5/srfi-69 [2] https://wiki.call-cc.org/eggref/5/typed-records#defstruct Good luck! siiky