David Hopwood wrote: > Anton van Straaten wrote: ... >>When you get to more complex cases, though, most type inferencers for >>Scheme assign traditional static-style types to terms. If you think >>about this in conjunction with the term "latent types", it's an obvious >>connection to make that what the inferencer is doing is recovering types >>that are latent in the source. > > > But these types are not part of the Scheme language. If you combine Scheme > with a type inferencer, you get a new language that is not R*RS Scheme, > and *that* language is typed.
Sure. So one obvious question, as I've just observed in another reply to you, is which language programmers actually program in. I'd say that they certainly don't program in the completely untyped language as defined by RnRS. > Note that different inferencers will give different type assignments. > They may be similar, but they may also be quite dissimilar in some cases. > This casts considerable doubt on the assertion that the inferencer is > "recovering types latent in the source". I mentioned this earlier, in a reply to Marshall where I gave an informal definition of latent typing, which read in part: "Terms in the program may be considered as having static types, and it is possible to infer those types, but it isn't necessarily easy to do so automatically, and there are usually many possible static type schemes that can be assigned to a given program." As far as the term "recovering" goes, that perhaps shouldn't be taken too literally. It's clearly not the case that a latently-typed program has a single formalizable type scheme which was put there deliberately by the programmer. But programmers do reason about things like the types of functions and expressions, and the goal of soft type inferencers is to find an approximation to what the programmer intended. Anton -- http://mail.python.org/mailman/listinfo/python-list