When passing an actual parameter by value to a formal parameter of a function or procedure, the actual parameter shall be assignment compatible with the type of the formal parameter.
For example given:
function IsDigit(c : char) : Boolean;
begin
if c in ['0'..'9'] then
IsDigit := true
else
IsDigit := false
end;
and
while not IsDigit(key) do
read(key)
then key (the actual parameter in IsDigit(key) shall be assignment compatible with char (the type of the formal parameter).