Re: Type names vs type structure
The FX language supported structural equivalance of recursive types in
its early incarnations. As I recall, the introduction of the module
system (which I designed) forced type recursions to go through opaque
bindings. But certainly in FX-87 there was structural matching of
recursive descriptions. In fact, the equivalance check was a standard
exercise in the graduate programming languages course (usually on the
first problem set).
Here was the historical development: The earliest recursive types (and
the ones we made students implement) were like mu types: (rec
<type-name> <type-body>). FX-87 supported mutually recursive
descriptions via something called DLETREC, like the Scheme LETREC
expression. FX-91 used a module system that supported bindings for
values, transparent (structural) descriptions, and abstract
descriptions. I believe that the trasparent descriptions could not be
recursive (except by referring to abstract/name bindings), but it was a
long time ago :>
FX-87 Reference Manual.
David K. Gifford, Pierre Jouvelot, John M. Lucassen, and Mark A. Sheldon.
MIT Laboratory for Computer Science.
MIT/LCS/TR-407. September 1987.
Report on the FX-91 Programming Language.
David K. Gifford, Pierre Jouvelot, Mark A. Sheldon, and James O'Toole.
MIT Laboratory for Computer Science. MIT/LCS/TR-531. February 1992.