According to this answer, ATS "used to support" recursive types. What has been the rationale for removing this feature? Additionally, are there plans for re-introducing it in the future? TIA.
Supporting recursive types directly would make it a lot more involved to check type equality, that is, to determine whether two types are equal. Also, most typical need for recursive types can be fulfilled with the use of datatypes. Also, one can introduce something like:
abstype fix_t(f: type -> type)
prfun fold{f:type->type}(x: !f(fix_t(f)) >> fix_t(f)): void
prfun unfold{f:type->type}(x: !fix_t(f) >> f(fix_t(f))): void
The following link may be relevant:
Currently, there is no plan to re-introduce recursive types back into ATS.