On Mon, Mar 11, 2019 at 3:36 PM Lassi Kortela <xxxxxx@lassi.io> wrote: > > >> 3) Search for procedures by argument name. This would not be perfect > > > > I think you'll be out of luck as I bet most of the times the name of > > the parameter is more a hint to its actual type than anything else... > > Yes, I meant it mostly as a poor man's type signature search :) E.g. > search for "filename" to find procedures that deal with files. Obviously > a better type search can be done with a big manual effort. I wouldn't > extract type names only to do this, but we'll get this search for free > if the index has them. Again, shameless self-promotion, but this is exactly what I managed to do with my proposed S-expression... :) For example bellow you can see which R7RS pocedures accept a port that is both for input and open: https://vonuvoli.volution.ro/documentation/libraries-html/r7rs/types/input-port-open.html#type__r7rs__input-port-open__referent-definitions-input-recursive Or for example what procedures accept a string that has the semantic of a path: https://vonuvoli.volution.ro/documentation/libraries-html/r7rs/types/path-string.html#type__r7rs__path-string__referent-definitions-input But also which other proceduces could accept a path, given that it is also a string: https://vonuvoli.volution.ro/documentation/libraries-html/r7rs/types/path-string.html#type__r7rs__path-string__referent-definitions-input-recursive Again all this would be impossible without thorough type information... :) > >> That sounds quite advanced :) Is there a circular list detector? > > > > In general it can easily be implemented (while recursing over the > > inputs) by using something like: > > I meant static detection knowing just the types and procedures. But I > guess one could implement design-by-contract (runtime assertions) or > just annotate types for documentation purposes even if we don't have > static checking. Well here is something where a `dyalizer` type of tool would help: if a variable is "deduced" to contain perhaps a circular list, then the "checker" could issue a warning that such a "possible circular" list is given to a function that is clearly marked not to accept one. Ciprian.