RedeclaredField
rascal-0.40.17
Synopsis
A field name is redeclared.
Description
The definition of an algebraic data type consists of a number of constructor functions. Each constructor has named fields but the same field name may only be used in different constructors if it has the same type in all occurrences in the declaration.
Remedy: rename one of the fields in the declaration.
Examples
This is correct since all occurrences of key
have type int
:
rascal>data D = d1(int key) | d2(str name, int key);
ok
This is incorrect since key
is used as int
and as str
.
rascal>data D = d1(int key) | d2(str key);
|prompt:///|(23,11,<1,23>,<1,34>): The field name key is illegally used for both str and int in type D
Advice: |https://www.rascal-mpl.org/docs/Rascal/Errors/CompileTimeErrors/RedeclaredField|
ok
This can be corrected by choosing other names for the labels:
rascal>data D = d1(int intKey) | d2(str strKey);
ok
A tuple declaration with a duplicate field name also gives an error:
rascal>tuple[int x, str x] Q = <3,"abc">;
|prompt:///|(13,5,<1,13>,<1,18>): x
Advice: |https://www.rascal-mpl.org/docs/Rascal/Errors/CompileTimeErrors/RedeclaredField|
ok