augustk wrote:If my memory serves me correctly, I have read somewhere a text by Niklaus Wirth where he says that the right hand side of a type declaration must be a structured type. My "default" understanding would be that any type is allowed. Do you remember if an earlier version of the language had this restriction? Otherwise it must be something I have made up.
It wasn't something you made up. The original Oberon Report (e.g. Revision 1. 10. 90) specified:
TypeDeclaration = identdef "=" type.
type = qualident | ArrayType | RecordType | PointerType | ProcedureType.
i.e. any type was allowed. The restriction to only allow structured types was introduced in Oberon-07:
TypeDeclaration = identdef "=" StrucType.
StrucType = ArrayType | RecordType | PointerType | ProcedureType.
type = qualident | StrucType.
This has now changed. The restriction has been removed in the latest (1.5.2016) revision of the report and we are back to the original definitions:
TypeDeclaration = identdef "=" type.
type = qualident | ArrayType | RecordType | PointerType | ProcedureType.