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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.