|
From: | siiky |
Subject: | Re: compiler types: records / collections interaction |
Date: | Fri, 9 Feb 2024 22:08:54 +0000 |
User-agent: | Mozilla Thunderbird Beta |
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
[Prev in Thread] | Current Thread | [Next in Thread] |