Text this: The Size-Change Termination Principle for Constructor Based Languages