(* * File to illustrate (and test) the various ways to do enums in RSL. *) (* * Method 1: opaque types. *) obj EnumType1 = a:A or b:B or c:C; obj A; obj B; obj C; op EnumTest1(e:EnumType1) = ( e?.a; e?.A; (* ERROR *) ); (* * Method 2: sym lits. *) obj EnumType2 = "a" or "b" or "c"; op EnumTest2(e:EnumType2) = ( e = "a"; e = "d"; (* ERROR *) ); (* * Method 3: concrete string types. *) obj EnumType3 = A3 or B3 or C3; obj A3 = "A"; obj B3 = "B"; obj C3 = "C"; op EnumTest2(e:EnumType3) = ( e = "A"; e = "D"; (* ERROR *) ); (* * Method 4: indirect sym lits. *) obj EnumType4 = A4 or B4 or C4; obj A4 = "a"; obj B4 = "b"; obj C4 = "c"; op EnumTest2(e:EnumType4) = ( e = "a"; e = "d"; (* ERROR *) );