diff --git a/src/compiledDataDump.ml b/src/compiledDataDump.ml
index db0ef21c64d922ab8d4a54a3441e7c232def5920..f86ffda2371866271a30ead6b2b04d418a286378 100644
--- a/src/compiledDataDump.ml
+++ b/src/compiledDataDump.ml
@@ -42,7 +42,7 @@ and string_of_type_eff_ext = function
       let f sep acc s  = acc ^ sep ^ (long s) in
 	(List.fold_left (f ", ")  (f "" "enum {" (List.hd sl)) (List.tl sl)) ^ "}"
   | Array_type_eff_ext (ty, sz) -> sprintf "%s^%d" (string_of_type_eff_ext ty) sz
-  | Struct_type_eff_ext (i, fl) -> 
+  | Struct_type_eff_ext (name, fl) -> 
       assert (fl <>[]);
       let f sep acc (id, (type_eff_ext, const_eff_opt))  = 
 	acc ^ sep ^ (Ident.to_string id) ^ " : " ^
@@ -51,7 +51,8 @@ and string_of_type_eff_ext = function
 	      None -> ""
 	    | Some ce -> " (" ^ (string_of_const_eff ce) ^ ")"
       in
-	(List.fold_left (f "; ")  (f "" " {" (List.hd fl)) (List.tl fl)) ^ "}"
+	(Ident.string_of_long name)^
+	  (List.fold_left (f "; ")  (f "" " {" (List.hd fl)) (List.tl fl)) ^ "}"
 	
   | Any -> "a"
   | Overload -> "o"
diff --git a/src/parser.mly b/src/parser.mly
index 56dad0e15c705897789b1334e57736e4d36cac6e..7f6bee08c11ed03e27748353969fd56fd4dd1904 100644
--- a/src/parser.mly
+++ b/src/parser.mly
@@ -1258,9 +1258,9 @@ sxCallByNameExpression:
 	/* on peut avoir une liste vide */
 	| sxIdentRef TK_OPEN_BRACE TK_CLOSE_BRACE
 		{ bynameexp $1.src (STRUCT_n $1.it) ([]) }
-	/* COMPATIBILITY : immediate "struct" without the type name */
+	/* COMPATIBILITY : immediate "struct" without the type name
 	| TK_OPEN_BRACE sxCallByNameParamList sxOptSemicol TK_CLOSE_BRACE
-		{ bynameexp $1 STRUCT_anonymous_n (List.rev $2) }
+		{ bynameexp $1 STRUCT_anonymous_n (List.rev $2) } */
 	;
 
 sxCallByNameParamList:
diff --git a/src/test/Makefile b/src/test/Makefile
index b65fa84b6290f94e9ad1077c21797425f7e659c1..d3b1e26dfc8417a9db1ef3c6df0eec57ad737a5e 100644
--- a/src/test/Makefile
+++ b/src/test/Makefile
@@ -62,7 +62,7 @@ errors:errors_nb
 	echo -e "There were $(shell grep Warning test_ok.res | wc -l) Warnings."
 	grep Warning test_ok.res || true
 	echo -e "There were $(shell grep Error test_ok.res | wc -l) errors."
-	grep error test_ok.res
+	grep Error test_ok.res
 
 
 
diff --git a/src/test/should_work/Pascal/newpacks.lus b/src/test/should_work/Pascal/newpacks.lus
index 09786067563b4ed00226299c7887ad65a5907278..af7dbdafe15aadb3aeb35c546cf1d297053cb240 100644
--- a/src/test/should_work/Pascal/newpacks.lus
+++ b/src/test/should_work/Pascal/newpacks.lus
@@ -44,11 +44,11 @@ body
    --package pbool is modSimple(bool);
    --package preal is modSimple(real);
 
-   --package pSel is modSimple( { i: int; b: bool; r: real } );
+   --package pSel is modSimple( selType{ i: int; b: bool; r: real } );
 	const n: int = -4;
 	node preced(in: selType) returns (out, out2: selType);
 	let
-      out2 = { i = 0; b = true; r = .0}; --pSel::fby1(in);
+      out2 = selType{ i = 0; b = true; r = .0}; --pSel::fby1(in);
   		out.i = pint::fby1(out2.i, in.i);
   		out.b = pbool::fby1(out2.b, in.b);
   		out.r = preal::fby1(out2.r, in.r);
diff --git a/src/test/should_work/Pascal/p.lus b/src/test/should_work/Pascal/p.lus
index 0c7ec2622e1713f63eaa62d86c266a013232290e..2f584f7c41ad6379612538c66ef32b38ac6360d6 100644
--- a/src/test/should_work/Pascal/p.lus
+++ b/src/test/should_work/Pascal/p.lus
@@ -49,7 +49,7 @@ body
 	const n: int = -4;
 	node preced(in: selType) returns (out, out2: selType);
 	let
-      out2 = { i = 0; b = true; r = .0}; --pSel::fby1(in);
+      out2 = selType { i = 0; b = true; r = .0}; --pSel::fby1(in);
   		out.i = pint::fby1(out2.i, in.i);
   		out.b = pbool::fby1(out2.b, in.b);
   		out.r = preal::fby1(out2.r, in.r);
diff --git a/src/test/should_work/fab_test/morel4.lus b/src/test/should_work/fab_test/morel4.lus
index a6f80e8d790b2fbfd93a2aceb7b26e9ad0ff6272..31428ce4cd7cb0bf94b4fd17619931aec1f65591 100644
--- a/src/test/should_work/fab_test/morel4.lus
+++ b/src/test/should_work/fab_test/morel4.lus
@@ -30,7 +30,7 @@ node mcmorel(i:int) returns (t:int^2);
 var
 	yo : toto;
 let
-	yo.titi = {in=i, out=i+1} ;
+	yo.titi = tube {in=i, out=i+1} ;
 	yo.tutu = true ;
 	t = [yo.titi.in, yo.titi.out] -> [pre(t[0])+1,pre(t[1])] ;
 	--t = [ 2, 3 ] ;
diff --git a/src/test/should_work/fab_test/morel5.lus b/src/test/should_work/fab_test/morel5.lus
index 0b76a7856678d42c59c47094d4a390918c96922a..3935b14b7363264b6bd33c95632fe19360794bc5 100644
--- a/src/test/should_work/fab_test/morel5.lus
+++ b/src/test/should_work/fab_test/morel5.lus
@@ -27,7 +27,7 @@ node mcmorel(i:int) returns (t:int^2; u:int^2^2);
 var
 	yo : toto;
 let
-	yo.titi = {in=i; out=i+1} ;
+	yo.titi = tube {in=i; out=i+1} ;
 	yo.tutu = true ;
 	t = [yo.titi.in, yo.titi.out] -> [pre(t[0])+1,pre(t[1])] ;
 	u = [ [10,100], [1000,10000] ] ;
diff --git a/src/test/should_work/lionel/ProduitBool/produitBool.lus b/src/test/should_work/lionel/ProduitBool/produitBool.lus
index bb117d4958a085a63bb3e2618133d960a28f0125..08b24096128a4c7f13f811ffd44336d63872045b 100644
--- a/src/test/should_work/lionel/ProduitBool/produitBool.lus
+++ b/src/test/should_work/lionel/ProduitBool/produitBool.lus
@@ -3,18 +3,20 @@ const size :  int = 10;
 
 -- ligne[i] = acc_in.multiplieur[i] si i>=acc_in.acc_in_PLC.rank et i<acc_in.acc_in_PLC.rank + size
 -- ligne[i] = 0 sinon
-node shift(acc_in : Tacc_in) returns (ligne : bool^(2*size); 
-                                      bidon : Tacc_inShift2);
+node shift(acc_in : Tacc_in) returns (ligne : bool^(2*size));
+var 
+  bidon : Tacc_inShift2;
 let
-  bidon, ligne = fill<<shiftFill;2*size>>({multiplieur = acc_in.multiplieur; -- cet accumulateur n'est pas modifié
-                                          rank = acc_in.rank;  -- cet accumulateur n'est pas modifié
-                                          actual_rank = 0});  -- ce accumulateur sert juste à compter. A la fin il vaut toujours 20
+  bidon, ligne = fill<<shiftFill;2*size>>(
+        Tacc_inShift2{multiplieur = acc_in.multiplieur; -- cet accumulateur n'est pas modifié
+                rank = acc_in.rank;  -- cet accumulateur n'est pas modifié
+                actual_rank = 0});  -- ce accumulateur sert juste à compter. A la fin il vaut toujours 20
 tel
 
 node shiftFill(acc_in : Tacc_inShift2) returns (acc_out : Tacc_inShift2; elt_out : bool);
 let
   acc_out = 
-    {--acc_in_PLC =  acc_in.acc_in_PLC;
+   Tacc_inShift2 {--acc_in_PLC =  acc_in.acc_in_PLC;
      multiplieur = acc_in.multiplieur;
      rank = acc_in.rank;
      actual_rank = acc_in.actual_rank + 1};
@@ -38,14 +40,16 @@ type T_isElementOf_ = {eltToSearch : bool; iselementof : bool};
 node _isElementOf_(e : bool; t : bool^size) returns (iselementof : bool);
 var acc_out : T_isElementOf_;
 let
-  acc_out = red<<iterated_isElementOf_;bool>>({eltToSearch = e; iselementof = false}, t);
+  acc_out = red<<iterated_isElementOf_; size>>(
+        T_isElementOf_{eltToSearch = e; iselementof = false}, t);
   iselementof = acc_out.iselementof;
 tel
 
 
 node iterated_isElementOf_(acc_in : T_isElementOf_; elt_in : bool) returns (acc_out : T_isElementOf_);
 let
-  acc_out = {eltToSearch = acc_in.eltToSearch;
+  acc_out = T_isElementOf_{
+             eltToSearch = acc_in.eltToSearch;
              iselementof = acc_in.iselementof or acc_in.eltToSearch = elt_in};
 tel
 
@@ -55,14 +59,19 @@ type iteratedStruct = {currentRank : int; rankToSelect : int; elementSelected :
 node selectElementOfRank_inArray_(rankToSelect : int;array : bool^size) returns (elementSelected : bool)
 var iterationResult : iteratedStruct;
 let
-  iterationResult = red<<selectOneStage;size>>({currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
+  iterationResult = red<<selectOneStage;size>>(
+                               iteratedStruct{currentRank = 0; 
+                                               rankToSelect = rankToSelect; 
+                                               elementSelected = array[0]}, 
+                                               array);
   elementSelected = iterationResult.elementSelected; 
 tel
 
 
 node selectOneStage(acc_in : iteratedStruct; currentElt : bool) returns (acc_out : iteratedStruct)
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = iteratedStruct
+            {currentRank = acc_in.currentRank+1;
              rankToSelect = acc_in.rankToSelect;
              elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
                                then currentElt
@@ -89,7 +98,8 @@ type Tacc_inShift2 = {
 
 
 
-node PLC(acc_in : Tacc_in; multiplicande : bool) returns (ligne : bool^(2*size));
+node PLC(acc_in  : Tacc_in; multiplicande : bool) 
+returns (acc_out:  Tacc_in; ligne : bool^(2*size));
 let
   ligne = if multiplicande=false
           then multiplicande ^ (2*size)
@@ -100,11 +110,17 @@ tel
 node produitBool(multiplicande, multiplieur : bool^size)
 --returns (produit :  bool^(2*n));
 returns (matrice : bool^(2*size)^size);
-var bidon : Tacc_in;
+-- var bidon : Tacc_in;
 --    matrice : bool^2size^size;
 let
-  bidon, matrice = map_red<<PLC, size>>({multiplieur = multiplieur; rank = 0}, multiplicande);
---  produit = red<<???;size>>(0^(2*size), matrice);
+
+-- R1:  C'est tout faux ce bidule. Je commente
+--  bidon, matrice = fillred<<PLC, size>>(
+--                                        Tacc_in{multiplieur = multiplieur; rank = 0}, 
+--
+--                                        multiplicande);
+  matrice = true^(2*size)^size;
+
 tel
 
 
diff --git a/src/test/should_work/lionel/calculs_max.lus b/src/test/should_work/lionel/calculs_max.lus
index 27fe7f8dabd3238094f5e13c8066cbf8e49d6e6a..25eb6e9bd524fb4a1065662898fa5bbd2e9e0e0c 100644
--- a/src/test/should_work/lionel/calculs_max.lus
+++ b/src/test/should_work/lionel/calculs_max.lus
@@ -31,19 +31,19 @@ node max(strin : struct_max; ecourant : int)
 let
         strout = 
                         if (ecourant<=strin.max2)
-                        then {max1= strin.max1; 
+                        then struct_max{max1= strin.max1; 
                                   max2= strin.max2; 
                                   imax1= strin.imax1; 
                                   imax2= strin.imax2; 
                                   icourant= strin.icourant+1}
                         else  if ((ecourant>strin.max2) and (ecourant<=strin.max1))
-                                   then {max1= strin.max1; 
+                                   then struct_max{max1= strin.max1; 
                                                  max2= ecourant; 
                                                  imax1= strin.imax1; 
                                                  imax2= strin.icourant; 
                                                  icourant= strin.icourant+1}
                                    else --ecourant>max1
-                                              {max1= ecourant;
+                                              struct_max{max1= ecourant;
                                                    max2= strin.max1; 
                                                    imax1= strin.icourant;
                                                    imax2= strin.imax1; 
@@ -53,7 +53,7 @@ tel
 
 node fill_bool(s_in : struct_fill_bool) returns (s_out : struct_fill_bool ; elt : bool);
 let
-  s_out = {imax1= s_in.imax1; 
+  s_out = struct_fill_bool{imax1= s_in.imax1; 
   imax2= s_in.imax2; 
   icourant= s_in.icourant+1};
   elt = (s_in.icourant = s_in.imax1) or (s_in.icourant = s_in.imax2);
@@ -65,13 +65,13 @@ var
      local_struct: struct_max;
 	tmp: struct_fill_bool;
 let
-        local_struct = red<<max;taille>>({max1= 0; 
+        local_struct = red<<max;taille>>(struct_max{max1= 0; 
                                           max2= 0; 
                                           imax1= -1; 
                                           imax2= -1; 
                                           icourant= 0},
                                           A);
-        tmp, res = fill<<fill_bool;taille>>({imax1= local_struct.imax1; 
+        tmp, res = fill<<fill_bool;taille>>(struct_fill_bool{imax1= local_struct.imax1; 
                                 imax2= local_struct.imax2; 
                                 icourant= 0});
 tel
diff --git a/src/test/should_work/lionel/deSimone.lus b/src/test/should_work/lionel/deSimone.lus
index f677b55dc64004d8c2b0e39afd96d5ad192385ac..e859e9c9fff67d6116f9186c8ea82c8884ef4fd4 100644
--- a/src/test/should_work/lionel/deSimone.lus
+++ b/src/test/should_work/lionel/deSimone.lus
@@ -23,7 +23,7 @@ node oneCell(accu_in : cell_accu;
 let
   ackout = (req and accu_in.token and accu_in.grant) and not (false -> pre(ackout));
   accu_out = 
-    {
+    cell_accu {
       token = accu_in.token;
       grant = not(req) and accu_in.grant
     };
@@ -35,7 +35,8 @@ node deSimone(new_token : bool ; request : tabType)
         returns (acknowledge : tabType);
 var accu_out : cell_accu;
 let
-        accu_out, acknowledge = fillred<<oneCell, size>>({token = new_token;
+        accu_out, acknowledge = fillred<<oneCell, size>>(cell_accu{
+                                                         token = new_token;
                                                          grant = true}, 
                                                          request);
 tel
diff --git a/src/test/should_work/lionel/moyenne.lus b/src/test/should_work/lionel/moyenne.lus
index 168c8995e18cb25629f8fe63356697861741431d..4a73558e30535a768d773fb3575af3b80b35aee1 100644
--- a/src/test/should_work/lionel/moyenne.lus
+++ b/src/test/should_work/lionel/moyenne.lus
@@ -8,13 +8,13 @@
 
 const size=10;
 
-type moyenne_accu = {sum :  real;
+type moyenne_accu = struct {sum :  real;
                      moyenne : real;
                      rank : real};
 
 node moyenne_step(accu_in : moyenne_accu; elt_in : real) returns (accu_out : moyenne_accu);
 let
-  accu_out = {
+  accu_out = moyenne_accu {
     sum = accu_in.sum + elt_in;
     moyenne = (accu_in.sum + elt_in)/(accu_in.rank+1.0);
     rank = accu_in.rank+1.0
@@ -30,7 +30,7 @@ node moyenne(Tab : real^size)
      returns (moy : real);
 var accu_out : moyenne_accu;
 let
-   accu_out = red<<moyenne_step, size>>({sum = 0.0;
+   accu_out = red<<moyenne_step, size>>( moyenne_accu  {sum = 0.0;
                                         moyenne = 0.0;
                                         rank = 0.0}, 
                                        Tab);
diff --git a/src/test/should_work/lionel/normal.lus b/src/test/should_work/lionel/normal.lus
index caf37e2761854a05609921826c3cf33e6f5e03d4..2c5430feb07cdb076bc3b6eaff0fd423de12b152 100644
--- a/src/test/should_work/lionel/normal.lus
+++ b/src/test/should_work/lionel/normal.lus
@@ -113,7 +113,7 @@ tel
 node extract_info_chg_glob ( EntreeGlob : T_EntreeGlob)  
         returns (InfoChgGlob : T_InfoChgGlob);
 let
-        InfoChgGlob = {chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+        InfoChgGlob = T_InfoChgGlob{chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -130,7 +130,7 @@ tel
 node int2InfoChgIndiv (m : int) 
         returns (InfoChgIndiv : T_InfoChgIndiv);
 let
-        InfoChgIndiv = { mesure_chg = m };
+        InfoChgIndiv = T_InfoChgIndiv { mesure_chg = m };
 tel
 
 node extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) 
@@ -152,7 +152,7 @@ tel
 node extract_info_gen_glob (EntreeGlob : T_EntreeGlob) 
         returns (InfoGenGlob : T_InfoGenGlob);
 let
-        InfoGenGlob = {elt_bidon = 0; chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+        InfoGenGlob =  T_InfoGenGlob {elt_bidon = 0; chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -163,7 +163,7 @@ tel
 node int2InfoGenIndiv (m : int) 
         returns (InfoGenIndiv : T_InfoGenIndiv);
 let
-        InfoGenIndiv = {mesure_gen = m};
+        InfoGenIndiv = T_InfoGenIndiv{mesure_gen = m};
 tel
 
 node extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob) 
diff --git a/src/test/should_work/lionel/testSilus.lus b/src/test/should_work/lionel/testSilus.lus
index ae7cad1fbe93d0b7da57928b7ab78984ad662890..e07278293f530ab0b0db6a53121ddcc2bc4126fa 100644
--- a/src/test/should_work/lionel/testSilus.lus
+++ b/src/test/should_work/lionel/testSilus.lus
@@ -100,7 +100,7 @@ tel
 node extract_info_chg_glob (EntreeGlob : T_EntreeGlob)  
 	returns (InfoChgGlob : T_InfoChgGlob); -- OK
 let
-	InfoChgGlob = {chg2gen =  map<<id;NBC>>(EntreeGlob.chg2gen)};
+	InfoChgGlob = T_InfoChgGlob {chg2gen =  map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -117,7 +117,7 @@ tel
 node int2InfoChgIndiv (m : int) -- OK
 	returns (InfoChgIndiv : T_InfoChgIndiv);
 let
-	InfoChgIndiv = {mesure_chg = m};
+	InfoChgIndiv = T_InfoChgIndiv{mesure_chg = m};
 tel
 
 node extract_tab_info_chg_indiv (EntreeGlob : T_EntreeGlob) -- OK
@@ -139,8 +139,9 @@ tel
 node extract_info_gen_glob (EntreeGlob : T_EntreeGlob)  -- OK
 	returns (InfoGenGlob : T_InfoGenGlob);
 let
-	InfoGenGlob = {elt_bidon = 0;
-                   chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
+	InfoGenGlob = T_InfoGenGlob{
+                        elt_bidon = 0;
+                        chg2gen = map<<id;NBC>>(EntreeGlob.chg2gen)};
 tel
 
 
@@ -151,7 +152,7 @@ tel
 node int2InfoGenIndiv (m : int)   -- OK
 	returns (InfoGenIndiv : T_InfoGenIndiv);
 let
-	InfoGenIndiv = {mesure_gen = m};
+	InfoGenIndiv = T_InfoGenIndiv{mesure_gen = m};
 tel
 
 node extract_tab_info_gen_indiv (EntreeGlob : T_EntreeGlob)  -- OK
diff --git a/src/test/should_work/lionel/triSel.lus b/src/test/should_work/lionel/triSel.lus
index 2ad271f2be74f42dd95b5886c35e4f5e207c9db5..5e431672d91c31197ef64449c9b63505b7711d60 100644
--- a/src/test/should_work/lionel/triSel.lus
+++ b/src/test/should_work/lionel/triSel.lus
@@ -56,7 +56,7 @@ var
         UnarySort_accu_out : Sort_accu;
 let
         UnarySort_accu_out = red<<UnarySort;size>>(
-                                { CurrentRank = 0;
+                                Sort_accu{ CurrentRank = 0;
                                            Tab = TIn},
                                 TIn);
         TSorted = UnarySort_accu_out.Tab;
@@ -88,7 +88,7 @@ var
 let
     --------------------------------------------------------------
     -- Find the minimum element (its rank and value) from the rank accu_in.CurrentRank
-        accu_out_min = red<<minFromRank;size>>( { MinVal = 0;          -- {0 :  value of the minimum in the begining of the iteration
+        accu_out_min = red<<minFromRank;size>>( MinFR_accu{ MinVal = 0;          -- 0 :  value of the minimum in the begining of the iteration
                                                             MinRank = 0;                                 --  0 :  rank of the minimum in the begining of the iteration
                                                             RankFrom = accu_in.CurrentRank;              --  accu_in.CurrentRank :  Rank we have to look from for finding the minimum
                                                             Rank = 0 },                                  --  0 : initialisation of the rank in the iteration
@@ -100,7 +100,7 @@ let
 
     --------------------------------------------------------------
     -- Select the current element in the array (of rank accu_in.CurrentRank)
-        accu_out_select = red<<select;size>>( { RankToFind = accu_in.CurrentRank;
+        accu_out_select = red<<select;size>>( Select_accu{ RankToFind = accu_in.CurrentRank;
                                                            CurrentRank = 0;
                                                            Val = 0 },
                                               accu_in.Tab);
@@ -111,7 +111,7 @@ let
     ------------------------------------------------------------------------
     -- Exchange the two elements 'current' and 'minimum from current rank'
         accu_out_exchange, localTab = fillred<<Exchange_i_j;size>>(
-                                         { MinVal = accu_out_min.MinVal;
+                                         Exchange_accu{ MinVal = accu_out_min.MinVal;
                                                         MinRank = accu_out_min.MinRank;
                                                         RankFrom = accu_out_select.RankToFind;
                                                         CurrentVal = accu_out_select.Val;
@@ -123,7 +123,7 @@ let
 
     -----------------------------------------------------------------------
     -- Update accumulator structure for next iteration
-        accu_out = { CurrentRank = accu_in.CurrentRank + 1; Tab = localTab };
+        accu_out = Sort_accu{ CurrentRank = accu_in.CurrentRank + 1; Tab = localTab };
     ----------------------------------------------------------------------
    
 tel
@@ -143,7 +143,7 @@ node minFromRank(accu_in : MinFR_accu; TabEltIn : int)
 let
 
 
-        accu_out = {
+        accu_out = MinFR_accu{
   -------------------------------------------------
   -- accu_out.MinVal : 
   MinVal = if ((accu_in.Rank=0) or (accu_in.Rank=accu_in.RankFrom)) then TabEltIn else
@@ -198,7 +198,7 @@ tel
 node Exchange_i_j(accu_in : Exchange_accu ; eltIn : int) 
         returns (accu_out : Exchange_accu ; eltOut : int);
 let
-        accu_out = { MinVal = accu_in.MinVal;
+        accu_out = Exchange_accu{ MinVal = accu_in.MinVal;
                                   MinRank = accu_in.MinRank;
                                   RankFrom = accu_in.RankFrom;
                                   CurrentVal = accu_in.CurrentVal;
@@ -225,7 +225,7 @@ tel
 node select(accu_in : Select_accu; elt : int) 
         returns (accu_out : Select_accu);
 let
-        accu_out = { RankToFind = accu_in.RankToFind;
+        accu_out = Select_accu{ RankToFind = accu_in.RankToFind;
                                 CurrentRank = accu_in.CurrentRank + 1;
                                 Val = if(accu_in.RankToFind=accu_in.CurrentRank)
                                       then elt
@@ -259,14 +259,14 @@ node Sorted(TIn : tabSize)
 var accu_out : sorted_iter_accu;
     TSorted : tabSize;
 let
-  TSorted = main(TIn);
-  accu_out = red<<sorted_iter;size>>({prev_elt = 0; prop_is_tt = true}, TSorted);
+  TSorted = triSel(TIn);
+  accu_out = red<<sorted_iter;size>>(sorted_iter_accu{prev_elt = 0; prop_is_tt = true}, TSorted);
   ok = accu_out.prop_is_tt;
 tel
 
 node sorted_iter(accu_in : sorted_iter_accu; elt : int)
      returns(accu_out : sorted_iter_accu);
 let
-  accu_out = { prev_elt = elt; 
+  accu_out = sorted_iter_accu{ prev_elt = elt; 
                                prop_is_tt = (accu_in.prev_elt <= elt) and (accu_in.prop_is_tt) };
 tel
\ No newline at end of file
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
index c6b0c78f45fd2376ec25cfd3508dcbfc8f407121..fd16e1c63761cc6f5a698b6ad8051d802feecb1d 100644
--- a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
@@ -1,22 +1,35 @@
 const size=10;
 
 type elementType = int;
-type iteratedStruct = {currentRank : int; rankToSelect : int; elementSelected : elementType};
+type iteratedStruct = 
+  {
+     currentRank : int; 
+     rankToSelect : int; 
+     elementSelected : elementType
+};
 
 node selectEltInArray(array : elementType^size; rankToSelect : int) returns (elementSelected : elementType);
 var iterationResult : iteratedStruct;
 let
-  iterationResult = red<<selectOneStage, size>>({currentRank=0; rankToSelect=rankToSelect; elementSelected=0}, array);
+  iterationResult = red<<selectOneStage, size>>(
+     iteratedStruct{
+          currentRank=0; 
+          rankToSelect=rankToSelect; 
+          elementSelected=0}, 
+     array);
   elementSelected = iterationResult.elementSelected; 
 tel
 
 
 
-node selectOneStage(acc_in : elementType; currentElt : elementType) returns (acc_out : elementType);
+node selectOneStage(acc_in : iteratedStruct; currentElt : elementType) 
+returns (acc_out : iteratedStruct);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
-             rankToSelect = acc_in.rankToSelect;
-             elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
-                               then currentElt
-                               else acc_in.elementSelected};
+  acc_out = iteratedStruct{
+                   currentRank = acc_in.currentRank+1;
+                   rankToSelect = acc_in.rankToSelect;
+                   elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
+                                     then currentElt
+                                     else acc_in.elementSelected
+                   };
 tel
diff --git a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
index 9f35e81114b5dad3462eace9d5428fcd95418da1..8d1c865aaa6bcc62b351dea7cecb5aa1b5f00e5f 100644
--- a/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
+++ b/src/test/should_work/packEnvTest/contractForElementSelectionInArray/packageTableau.lus
@@ -77,13 +77,13 @@ type T_isElementOf_ = {eltToSearch : elementType; iselementof : bool};
 node _isElementOf_(e : elementType; t : arrayType) returns (iselementof : bool);
 var acc_out : T_isElementOf_;
 let
-  acc_out = red<<iterated_isElementOf_, size>>({eltToSearch = e; iselementof = false}, t);
+  acc_out = red<<iterated_isElementOf_, size>>(T_isElementOf_{eltToSearch = e; iselementof = false}, t);
 tel
 
 
 node iterated_isElementOf_(acc_in : T_isElementOf_; elt_in : elementType) returns (acc_out : T_isElementOf_);
 let
-  acc_out = {eltToSearch = acc_in.eltToSearch;
+  acc_out = T_isElementOf_{eltToSearch = acc_in.eltToSearch;
              iselementof = acc_in or _isEqualTo_(acc_in.eltToSearch, elt_in)};
 tel
 
@@ -97,7 +97,7 @@ node selectElementOfRank_inArray_(rankToSelect : int;array : arrayType) returns
 %GUARANTEE:guaranteeSelectElementOfRank_inArray_%
 var iterationResult : iteratedStruct;
 let
-  iterationResult = red<<selectOneStage, size>>({currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
+  iterationResult = red<<selectOneStage, size>>(iteratedStruct{currentRank = 0; rankToSelect = rankToSelect; elementSelected = array[0]}, array);
   elementSelected = iterationResult.elementSelected; 
 tel
 
@@ -116,7 +116,7 @@ tel
 -- guarantee : acc_out.currentRank>acc_in.currentRank
 node selectOneStage(acc_in : iteratedStruct; currentElt : elementType) returns (acc_out : iteratedStruct);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = iteratedStruct{currentRank = acc_in.currentRank+1;
              rankToSelect = acc_in.rankToSelect;
              elementSelected = if(acc_in.currentRank=acc_in.rankToSelect)
                                then currentElt
@@ -147,7 +147,7 @@ tel
 node getRank_ofMaximumIn_(array : arrayType) returns (rankOfMaximumElement : int);
 var local : currentRank_withMemorizedRank;
 let
-  local = red<<selectMaxRank, size>>({currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = array[0]}, array);
+  local = red<<selectMaxRank, size>>(currentRank_withMemorizedRank{currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = array[0]}, array);
   rankOfMaximumElement = local.rankOfMemorizedVal;
 tel
 
@@ -159,7 +159,7 @@ type currentRank_withMemorizedRank = {currentRank : int; rankOfMemorizedVal : in
 -- guarantee : acc_out.currentRank>acc_in.currentRank
 node selectMaxRank(acc_in : currentRank_withMemorizedRank; e1 : elementType) returns (acc_out : currentRank_withMemorizedRank);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = currentRank_withMemorizedRank{currentRank = acc_in.currentRank+1;
              rankOfMemorizedVal = if(_isGreaterThan_(e1, acc_in.memorizedVal)) then acc_in.currentRank else acc_in.rankOfMemorizedVal;
              memorizedVal = if(_isGreaterThan_(e1, acc_in.memorizedVal)) then e1 else acc_in.memorizedVal};
 tel
@@ -189,7 +189,7 @@ node getRank_ofMinimumIn_(array : arrayType) returns (rankOfMinimumElement : int
 var minElement : elementType;
 let
   minElement = getMinimumIn_(array);
-  rankOfMinimumElement = red<<selectMinRank, size>>({currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = minElement}, array).rankOfMemorizedVal;
+  rankOfMinimumElement = red<<selectMinRank, size>>(currentRank_withMemorizedRank{currentRank = 0; rankOfMemorizedVal = 0; memorizedVal = minElement}, array).rankOfMemorizedVal;
 tel
 
 
@@ -197,7 +197,7 @@ tel
 -- guarantee : acc_out.currentRank>acc_in.currentRank
 node selectMinRank(acc_in : currentRank_withMemorizedRank; elt : elementType) returns (acc_out : currentRank_withMemorizedRank);
 let
-  acc_out = {currentRank = acc_in.currentRank+1;
+  acc_out = currentRank_withMemorizedRank{currentRank = acc_in.currentRank+1;
              rankOfMemorizedVal = if(_isEqualTo_(acc_in.memorizedVal, elt)) then acc_in.currentRank else acc_in.rankOfMemorizedVal;
              memorizedVal = acc_in.memorizedVal};
 tel
@@ -209,13 +209,13 @@ type forSortingAlgo =  {previousElement : elementType; sortedUpToHere : bool};
 node _isLoselySorted(array : arrayType) returns (array_isLoselySorted : bool);
 var result : forSortingAlgo;
 let 
-  result = red<<isLocallyLoselySorted, size>>({previousElement = array[0]; sortedUpToHere = true}, array);
+  result = red<<isLocallyLoselySorted, size>>(forSortingAlgo{previousElement = array[0]; sortedUpToHere = true}, array);
   array_isLoselySorted = result.sortedUpToHere;
 tel
 
 node isLocallyLoselySorted(acc_in : forSortingAlgo; elt : elementType) returns (acc_out : forSortingAlgo);
 let
-  acc_out = {previousElement = elt; 
+  acc_out = forSortingAlgo{previousElement = elt; 
              sortedUpToHere = _isGreaterOrEqualTo_(elt, acc_in.previousElement) and acc_in.sortedUpToHere};
 tel
 
@@ -228,9 +228,9 @@ var
 	UnarySort_accu_out : Sort_accu;
 let
 	UnarySort_accu_out = red<<UnarySort, size>>(
-                              {CurrentRank = 0;
-							            Tab = array}, -- Values given for test
-							  array);	-- same
+                                             Sort_accu{CurrentRank = 0;
+                                             Tab = array}, -- Values given for test
+                                             array);	-- same
 	arraySorted = UnarySort_accu_out.Tab;
 tel
 
@@ -272,7 +272,7 @@ var
 -- localTab : tableau calculé (trié un cran plus loin)
 let
   -- je commence par trouver le minimum à partir de accu_in.CurrentRank
-  accu_out_min = red<<minFromRank, size>>({MinVal = 0; 
+  accu_out_min = red<<minFromRank, size>>(Sort_accu{MinVal = 0; 
                                          MinRank = accu_in.CurrentRank;
                                          RankFrom = accu_in.CurrentRank;
                                          Rank = 0}; 
@@ -280,20 +280,20 @@ let
 
   -- ensuite, je trouve la valeur du rang courant (rang où j'en suis 
   -- de l'itération de UnarySort
-  accu_out_select = red<<select, size>>({RankToFind = accu_in.CurrentRank;
+  accu_out_select = red<<select, size>>(Select_accu{RankToFind = accu_in.CurrentRank;
                                        CurrentRank = 0;
                                        Val = 0};
                                        accu_in.Tab);
 
   -- puis j'échange le minimum trouvé et l'élement de rang courant
   --    (courant dans l'itération de UnarySort)
-  accu_out_exchange, localTab = map_red<<Exchange_i_j, size>>({MinVal = accu_out_min.MinVal;
+  accu_out_exchange, localTab = map_red<<Exchange_i_j, size>>(Exchange_accu{MinVal = accu_out_min.MinVal;
                                                              MinRank = accu_out_min.MinRank;
                                                              RankFrom = accu_out_select.RankToFind;
                                                              CurrentVal = accu_out_select.Val;
                                                              Rank = 0},
                                                              accu_in.Tab);
-  accu_out = {CurrentRank = accu_in.CurrentRank + 1,
+  accu_out = Sort_accu{CurrentRank = accu_in.CurrentRank + 1,
                        Tab = localTab};
 tel
 
@@ -304,7 +304,7 @@ tel
 node minFromRank(accu_in : MinFR_accu; TabEltIn : elementType)
 	returns (accu_out : MinFR_accu);
 let
-  accu_out = {MinVal = if (accu_in.Rank<=accu_in.RankFrom) 
+  accu_out = MinFR_accu{MinVal = if (accu_in.Rank<=accu_in.RankFrom) 
                                  then TabEltIn
                                  else
                                    if (accu_in.Rank>=accu_in.RankFrom)    
@@ -341,7 +341,7 @@ tel
 node Exchange_i_j(accu_in : Exchange_accu ; eltIn : elementType) 
 	returns (accu_out : Exchange_accu ; eltOut : elementType);
 let
-	accu_out = {MinVal = accu_in.MinVal;
+	accu_out = Exchange_accu{MinVal = accu_in.MinVal;
 				             MinRank = accu_in.MinRank;
 				             RankFrom = accu_in.RankFrom;
 				             CurrentVal = accu_in.CurrentVal;
@@ -360,7 +360,7 @@ tel
 node select(accu_in : Select_accu; elt : elementType) 
 	returns (accu_out : Select_accu);
 let
-	accu_out = {RankToFind = accu_in.RankToFind;
+	accu_out = Select_accu{ RankToFind = accu_in.RankToFind;
 				CurrentRank = accu_in.CurrentRank + 1;
 				Val =  if(accu_in.RankToFind=accu_in.CurrentRank)
 					  then elt
diff --git a/src/test/test.res.exp b/src/test/test.res.exp
index 785a165030e77ab195bc4ecae59184ef55f88bdc..22bab6dbccf3f635aac4c806641f1409317caf1e 100644
--- a/src/test/test.res.exp
+++ b/src/test/test.res.exp
@@ -2143,14 +2143,14 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package dependeur_struct
 	Exported types:
-type dependeur_struct__time =  {h : int; m : int; s : int; ms : int};
+type dependeur_struct__time = dependeur_struct::time {h : int; m : int; s : int; ms : int};
 	Exported constants:
 	Exported nodes:
 
 node dependeur_struct__dependeur_struct(
 	time_in_ms:int) 
 returns (
-	theTime: {h : int;
+	theTime:dependeur_struct::time {h : int;
 	m : int;
 	s : int;
 	ms : int});
@@ -2345,15 +2345,15 @@ End of Syntax table dump. 
 	Exported types:
 type ex__t = int^1^2^3^4;
 type ex__t1 = int^1^2^3^4^4;
-type ex__t2 =  {a : int; b : bool^11^22};
-type ex__s1 =  {x : int; y : int^1^2^3^4};
-type ex__s =  {x : int^1^2^3^4; y :  {x : int; y : int^1^2^3^4}};
+type ex__t2 = ex::t2 {a : int; b : bool^11^22};
+type ex__s1 = ex::s1 {x : int; y : int^1^2^3^4};
+type ex__s = ex::s {x : int^1^2^3^4; y : ex::s1 {x : int; y : int^1^2^3^4}};
 	Exported constants:
 	Exported nodes:
 
 node ex__ex(
-	a: {x : int^1^2^3^4;
-	y :  {x : int;
+	a:ex::s {x : int^1^2^3^4;
+	y : ex::s1 {x : int;
 	y : int^1^2^3^4}}) 
 returns (
 	b:int);
@@ -2519,10 +2519,10 @@ type hanane__t1;
 const hanane__a = 4;
 type hanane__string = int^4;
 type hanane__string2d = int^4^4;
-type hanane__structT =  {x : int; y : real; z : int^4^4^4};
+type hanane__structT = hanane::structT {x : int; y : real; z : int^4^4^4};
 type hanane__t2;
 type hanane__t3;
-type hanane__tabStruct =  {x : int; y : real; z : int^4^4^4}^2;
+type hanane__tabStruct = hanane::structT {x : int; y : real; z : int^4^4^4}^2;
 	Exported constants:
 const hanane__b = true;
 const hanane__c = 3.140000;
@@ -2531,14 +2531,14 @@ const hanane__c = 3.140000;
 node hanane__hanane(
 	a1:bool;
 	b1:int^4^4;
-	c1: {x : int;
+	c1:hanane::structT {x : int;
 	y : real;
 	z : int^4^4^4}^2) 
 returns (
 	res:bool);
 var
    h1:int^4;
-   h2: {x : int; y : real; z : int^4^4^4}^2;
+   h2:hanane::structT {x : int; y : real; z : int^4^4^4}^2;
    h3:int;
    h4:real;
    h5:int^4^4^4;
@@ -3092,8 +3092,8 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm
 	Exported types:
-type mm__pair =  {a : int; b : int};
-type mm__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm__pair = mm::pair {a : int; b : int};
+type mm__pairpair = mm::pairpair {a : mm::pair {a : int; b : int}; b : mm::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
 node mm__mm(a:int; b:int) returns (min:int; max:int);
@@ -3126,11 +3126,11 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm1
 	Exported types:
-type mm1__pair =  {a : int; b : int};
-type mm1__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm1__pair = mm1::pair {a : int; b : int};
+type mm1__pairpair = mm1::pairpair {a : mm1::pair {a : int; b : int}; b : mm1::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
-node mm1__mm1(a:int; b:int) returns (y: {a : int; b : int});
+node mm1__mm1(a:int; b:int) returns (y:mm1::pair {a : int; b : int});
 let
    (y., y.) =  if ((a > b)) then ((b, a)) else ((a, b));
 tel
@@ -3160,11 +3160,11 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm22
 	Exported types:
-type mm22__pair =  {a : int; b : int};
-type mm22__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm22__pair = mm22::pair {a : int; b : int};
+type mm22__pairpair = mm22::pairpair {a : mm22::pair {a : int; b : int}; b : mm22::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
-node mm22__mm22(a:int; b:int) returns (y: {a : int; b : int});
+node mm22__mm22(a:int; b:int) returns (y:mm22::pair {a : int; b : int});
 let
    y. =  if ((a > b)) then (b) else (a);
    y. =  if ((a > b)) then (a) else (b);
@@ -3195,11 +3195,17 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package mm3
 	Exported types:
-type mm3__pair =  {a : int; b : int};
-type mm3__pairpair =  {a :  {a : int; b : int}; b :  {a : int; b : int}};
+type mm3__pair = mm3::pair {a : int; b : int};
+type mm3__pairpair = mm3::pairpair {a : mm3::pair {a : int; b : int}; b : mm3::pair {a : int; b : int}};
 	Exported constants:
 	Exported nodes:
-node mm3__mm3(a: {a : int; b : int}) returns (y: {a : int; b : int});
+
+node mm3__mm3(
+	a:mm3::pair {a : int;
+	b : int}) 
+returns (
+	y:mm3::pair {a : int;
+	b : int});
 let
    (y., y.) =  if ((a.a > a.b)) then ((a.b, a.a)) else ((a.a, a.b));
 tel
@@ -4547,9 +4553,9 @@ End of Syntax table dump. 
 	Exported types:
 type simple__S;
 type simple__T = int;
-type simple__H =  {x : simple__S; y : int};
-type simple__U =  {a : int; b :  {x : simple__S; y : int}};
-type simple__V =  {a : int; b :  {x : simple__S; y : int}}^4;
+type simple__H = simple::H {x : simple__S; y : int};
+type simple__U = simple::U {a : int; b : simple::H {x : simple__S; y : int}};
+type simple__V = simple::U {a : int; b : simple::H {x : simple__S; y : int}}^4;
 const simple__size = 16;
 type simple__W = int^18;
 	Exported constants:
@@ -4561,8 +4567,8 @@ const simple__c = true;
 
 node simple__simple(
 	e:bool;
-	a: {a : int;
-	b :  {x : simple__S;
+	a:simple::U {a : int;
+	b : simple::H {x : simple__S;
 	y : int}}) 
 returns (
 	b:int);
@@ -5123,10 +5129,10 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package left
 	Exported types:
-type left__truc =  {a : bool^100; b : int};
+type left__truc = left::truc {a : bool^100; b : int};
 	Exported constants:
 	Exported nodes:
-node left__toto(x:bool) returns (t: {a : bool^100; b : int}^3);
+node left__toto(x:bool) returns (t:left::truc {a : bool^100; b : int}^3);
 let
    t[0].[0..98 step 2][48..0 step -2] = bool^25;
    t[0].[0..98 step 2][1..49 step 2] = bool^25;
@@ -5134,7 +5140,7 @@ let
    t[0].[1..99 step 2][1] = true;
    t[0].[5..99 step 2] = bool^48;
    t[0]. = 42;
-   t[1..2] =  {a : bool^100; b : int}^2;
+   t[1..2] = left::truc {a : bool^100; b : int}^2;
 tel
 -- end of node left__toto
 
@@ -5214,12 +5220,38 @@ tel
 	Exported types:
 	Exported constants:
 	Exported nodes:
-type inter__selType =  {i : int; b : bool; r : real};
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/Pascal/newpacks.lus
+node inter__preced(
+	in:inter::selType {i : int;
+	b : bool;
+	r : real}) 
+returns (
+	out:inter::selType {i : int;
+	b : bool;
+	r : real};
+	out2:inter::selType {i : int;
+	b : bool;
+	r : real});
+let
+   out2 = selType{i=0;b=true;r=.0};
+   out. = pint__fby1(out2.i, in.i);
+   out. = pbool__fby1(out2.b, in.b);
+   out. = preal__fby1(out2.r, in.r);
+tel
+-- end of node inter__preced
+node mainPack__preced(in:inter__selType) returns (out:inter__selType);
+var
+   out2:inter__selType;
+let
+   (out, out2) = inter__preced(in);
+tel
+-- end of node mainPack__preced
+ * package inter
+	Exported types:
+	Exported constants:
+const inter__n = -4;
+	Exported nodes:
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/Pascal/onlyroll.lus
@@ -5855,12 +5887,38 @@ tel
 	Exported types:
 	Exported constants:
 	Exported nodes:
-type inter__selType =  {i : int; b : bool; r : real};
-
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/Pascal/p.lus
+node inter__preced(
+	in:inter::selType {i : int;
+	b : bool;
+	r : real}) 
+returns (
+	out:inter::selType {i : int;
+	b : bool;
+	r : real};
+	out2:inter::selType {i : int;
+	b : bool;
+	r : real});
+let
+   out2 = selType{i=0;b=true;r=.0};
+   out. = pint__fby1(out2.i, in.i);
+   out. = pbool__fby1(out2.b, in.b);
+   out. = preal__fby1(out2.r, in.r);
+tel
+-- end of node inter__preced
+node mainPack__preced(in:inter__selType) returns (out:inter__selType);
+var
+   out2:inter__selType;
+let
+   (out, out2) = inter__preced(in);
+tel
+-- end of node mainPack__preced
+ * package inter
+	Exported types:
+	Exported constants:
+const inter__n = -4;
+	Exported nodes:
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/Pascal/packs.lus
@@ -5897,10 +5955,17 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package struct0
 	Exported types:
-type struct0__Toto =  {x : int (1); y : int (2)};
+type struct0__Toto = struct0::Toto {x : int (1); y : int (2)};
 	Exported constants:
 	Exported nodes:
-node struct0__bibi(dummy:int) returns (z: {x : int (1); y : int (2)});
+
+node struct0__bibi(
+	dummy:int) 
+returns (
+	z:struct0::Toto {x : int (
+	1);
+	y : int (
+	2)});
 let
    z = Toto{x=3};
 tel
@@ -6656,8 +6721,8 @@ type decl__t4 = decl__t1^8;
 const decl__d = true;
 const decl__h = 2;
 type decl__t5 = decl__t1^8^5;
-type decl__coord =  {x : real; y : real};
-type decl__coord_tab =  {x : real; y : real}^1;
+type decl__coord = decl::coord {x : real; y : real};
+type decl__coord_tab = decl::coord {x : real; y : real}^1;
 type decl__couleur = enum {decl__bleu, decl__blanc, decl__rouge};
 	Exported constants:
 const decl__e = 8.500000;
@@ -6746,8 +6811,8 @@ type declaration__t4 = declaration__t1^8;
 const declaration__d = true;
 const declaration__h = 2;
 type declaration__t5 = declaration__t1^8^5;
-type declaration__coord =  {x : real; y : real};
-type declaration__coord_tab =  {x : real; y : real}^1;
+type declaration__coord = declaration::coord {x : real; y : real};
+type declaration__coord_tab = declaration::coord {x : real; y : real}^1;
 type declaration__couleur = enum {declaration__bleu, declaration__blanc, declaration__rouge};
 	Exported constants:
 const declaration__e = 8.500000;
@@ -6839,10 +6904,10 @@ type def__t1;
 const def__a = 4;
 type def__string = int^4;
 type def__string2d = int^4^4;
-type def__structT =  {x : int; y : real; z : int^4^4^4};
+type def__structT = def::structT {x : int; y : real; z : int^4^4^4};
 type def__t2;
 type def__t3;
-type def__tabStruct =  {x : int; y : real; z : int^4^4^4}^2;
+type def__tabStruct = def::structT {x : int; y : real; z : int^4^4^4}^2;
 	Exported constants:
 const def__id_int = 5;
 const def__b = true;
@@ -6852,7 +6917,7 @@ const def__c = 3.140000;
 node def__def(
 	a1:bool;
 	b1:int^4^4;
-	c1: {x : int;
+	c1:def::structT {x : int;
 	y : real;
 	z : int^4^4^4}^2;
 	d1:int^23) 
@@ -6860,7 +6925,7 @@ returns (
 	res:bool);
 var
    h1:int^4;
-   h2: {x : int; y : real; z : int^4^4^4}^2;
+   h2:def::structT {x : int; y : real; z : int^4^4^4}^2;
    h3:int;
    h4:real;
    h5:int^4^4^4;
@@ -6982,14 +7047,14 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package filter
 	Exported types:
-type filter__complexe =  {x : real; y : real};
-type filter__cdouble =  {x :  {x : real; y : real}; y :  {x : real; y : real}};
+type filter__complexe = filter::complexe {x : real; y : real};
+type filter__cdouble = filter::cdouble {x : filter::complexe {x : real; y : real}; y : filter::complexe {x : real; y : real}};
 	Exported constants:
 	Exported nodes:
 node filter__filter(a:real; b:real) returns (ok:bool);
 var
    i:real;
-   z: {x :  {x : real; y : real}; y :  {x : real; y : real}};
+   z:filter::cdouble {x : filter::complexe {x : real; y : real}; y : filter::complexe {x : real; y : real}};
 let
    z.. = 0. -> i;
    z.. = z.x.x;
@@ -7129,13 +7194,13 @@ const map_red_iter__NBC = 20;
 type map_red_iter__INTNBC = int^20;
 const map_red_iter__NBG = 4;
 type map_red_iter__INTNBG = int^4;
-type map_red_iter__T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
+type map_red_iter__T_EntreeGlob = map_red_iter::T_EntreeGlob {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
 type map_red_iter__T_ComChg = int;
-type map_red_iter__T_InfoGenIndiv =  {mesure_gen : int};
+type map_red_iter__T_InfoGenIndiv = map_red_iter::T_InfoGenIndiv {mesure_gen : int};
 type map_red_iter__T_EtatCharge = int;
-type map_red_iter__T_InfoChgGlob =  {chg2gen : int^20};
-type map_red_iter__T_InfoChgIndiv =  {mesure_chg : int};
-type map_red_iter__T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20};
+type map_red_iter__T_InfoChgGlob = map_red_iter::T_InfoChgGlob {chg2gen : int^20};
+type map_red_iter__T_InfoChgIndiv = map_red_iter::T_InfoChgIndiv {mesure_chg : int};
+type map_red_iter__T_InfoGenGlob = map_red_iter::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20};
 	Exported constants:
 	Exported nodes:
 
@@ -7154,8 +7219,8 @@ tel
 
 node map_red_iter__map_red_iter(
 	indice_gen:int;
-	InfoGenIndiv: {mesure_gen : int};
-	InfoGenGlob: {elt_bidon : int;
+	InfoGenIndiv:map_red_iter::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:map_red_iter::T_InfoGenGlob {elt_bidon : int;
 	chg2gen : int^20};
 	TabEtatCharge:int^20;
 	TabComVal:bool^20) 
@@ -8262,19 +8327,62 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package morel4
 	Exported types:
-type morel4__tube =  {in : int; out : int};
-type morel4__toto =  {titi :  {in : int; out : int}; tutu : bool};
+type morel4__tube = morel4::tube {in : int; out : int};
+type morel4__toto = morel4::toto {titi : morel4::tube {in : int; out : int}; tutu : bool};
 type morel4__arrayb = bool^3;
 type morel4__arrayi = int^2^3;
 	Exported constants:
 	Exported nodes:
+node morel4__mcmorel(i:int) returns (t:int^2);
+var
+   yo:morel4::toto {titi : morel4::tube {in : int; out : int}; tutu : bool};
+let
+   yo. = tube{in=i;out=(i + 1)};
+   yo. = true;
+   t = [yo.titi.in, yo.titi.out] -> [(pre(t[0]) + 1), pre(t[1])];
+tel
+-- end of node morel4__mcmorel
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-Warning. in file "should_work/fab_test/morel4.lus", line 33, col 17 to 17, token ',':
----> separator mismatch, ';' expected
+node morel4__tab(
+	b:bool;
+	i:int) 
+returns (
+	b1:bool;
+	b2:bool;
+	b3:bool;
+	i1:int;
+	i2:int;
+	i3:int);
+var
+   tabb:bool^3;
+   tabi:int^2^3;
+let
+   (b1, b2, b3) = (tabb[0], tabb[1], tabb[2]);
+    (i1, i2, i3) = ((tabi[0][0] + tabi[0][1]), (tabi[1][0] + tabi[1][1]),
+	 (tabi[2][0] + tabi[2][1]));
+   tabb[0] = b;
+   tabb[1..2] = [true, false];
+   tabi[2] = morel4__mcmorel(i);
+   tabi[0..1] = [[10, 100], [1000, 10000]];
+tel
+-- end of node morel4__tab
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/fab_test/morel4.lus
+node morel4__morel4(
+	b:bool;
+	i:int) 
+returns (
+	b1:bool;
+	b2:bool;
+	b3:bool;
+	i1:int;
+	i2:int;
+	i3:int);
+let
+   (b1, b2, b3, i1, i2, i3) = morel4__tab(b, i);
+tel
+-- end of node morel4__morel4
+Warning. in file "should_work/fab_test/morel4.lus", line 33, col 22 to 22, token ',':
+---> separator mismatch, ';' expected
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/fab_test/morel5.lus
@@ -8304,15 +8412,15 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package morel5
 	Exported types:
-type morel5__tube =  {in : int; out : int};
-type morel5__toto =  {titi :  {in : int; out : int}; tutu : bool};
+type morel5__tube = morel5::tube {in : int; out : int};
+type morel5__toto = morel5::toto {titi : morel5::tube {in : int; out : int}; tutu : bool};
 type morel5__arrayb = bool^3;
 type morel5__arrayi = int^2^3;
 	Exported constants:
 	Exported nodes:
 
 node morel5__tab(
-	yo: {titi :  {in : int;
+	yo:morel5::toto {titi : morel5::tube {in : int;
 	out : int};
 	tutu : bool};
 	tabb:bool^3;
@@ -8332,7 +8440,7 @@ tel
 -- end of node morel5__tab
 
 node morel5__morel5(
-	t: {titi :  {in : int;
+	t:morel5::toto {titi : morel5::tube {in : int;
 	out : int};
 	tutu : bool};
 	b:bool^3;
@@ -8348,11 +8456,16 @@ let
    (b1, b2, b3, i1, i2, i3) = morel5__tab(t, b, i);
 tel
 -- end of node morel5__morel5
-
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/fab_test/morel5.lus
+node morel5__mcmorel(i:int) returns (t:int^2; u:int^2^2);
+var
+   yo:morel5::toto {titi : morel5::tube {in : int; out : int}; tutu : bool};
+let
+   yo. = tube{in=i;out=(i + 1)};
+   yo. = true;
+   t = [yo.titi.in, yo.titi.out] -> [(pre(t[0]) + 1), pre(t[1])];
+   u = [[10, 100], [1000, 10000]];
+tel
+-- end of node morel5__mcmorel
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/fab_test/noAlarm.lus
@@ -9856,18 +9969,130 @@ End of Syntax table dump. 
  * package produitBool
 	Exported types:
 const produitBool__size = 10;
-type produitBool__Tacc_in =  {multiplieur : bool^10; rank : int};
-type produitBool__T_isElementOf_ =  {eltToSearch : bool; iselementof : bool};
-type produitBool__iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool};
-type produitBool__Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type produitBool__Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
+type produitBool__Tacc_in = produitBool::Tacc_in {multiplieur : bool^10; rank : int};
+type produitBool__T_isElementOf_ = produitBool::T_isElementOf_ {eltToSearch : bool; iselementof : bool};
+type produitBool__iteratedStruct = produitBool::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : bool};
+type produitBool__Tacc_inShift2 = produitBool::Tacc_inShift2 {multiplieur : bool^10; rank : int; actual_rank : int};
+type produitBool__Tacc_inShift = produitBool::Tacc_inShift {acc_in_PLC : produitBool::Tacc_in {multiplieur : bool^10; rank : int}; actual_rank : int};
 	Exported constants:
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node produitBool__iterated_isElementOf_(
+	acc_in:produitBool::T_isElementOf_ {eltToSearch : bool;
+	iselementof : bool};
+	elt_in:bool) 
+returns (
+	acc_out:produitBool::T_isElementOf_ {eltToSearch : bool;
+	iselementof : bool});
+let
+    acc_out =
+	T_isElementOf_{eltToSearch=acc_in.eltToSearch;iselementof=(acc_in.iselementof
+	 or (acc_in.eltToSearch = elt_in))};
+tel
+-- end of node produitBool__iterated_isElementOf_
+
+node produitBool___isElementOf_(
+	e:bool;
+	t:bool^10) 
+returns (
+	iselementof:bool);
+var
+   acc_out:produitBool::T_isElementOf_ {eltToSearch : bool; iselementof : bool};
+let
+    acc_out = red<<node produitBool__iterated_isElementOf_, const
+	 10>>(T_isElementOf_{eltToSearch=e;iselementof=false}, t);
+   iselementof = acc_out.iselementof;
+tel
+-- end of node produitBool___isElementOf_
+
+node produitBool__selectOneStage(
+	acc_in:produitBool::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : bool};
+	currentElt:bool) 
+returns (
+	acc_out:produitBool::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : bool});
+let
+    acc_out = iteratedStruct{currentRank=(acc_in.currentRank +
+	1);rankToSelect=acc_in.rankToSelect;elementSelected= if
+	((acc_in.currentRank = acc_in.rankToSelect)) then (currentElt) else
+	 (acc_in.elementSelected)};
+tel
+-- end of node produitBool__selectOneStage
+
+node produitBool__selectElementOfRank_inArray_(
+	rankToSelect:int;
+	array:bool^10) 
+returns (
+	elementSelected:bool);
+var
+   iterationResult:produitBool::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : bool};
+let
+    iterationResult = red<<node produitBool__selectOneStage, const
+	10>>(iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=array[0]},
+	 array);
+   elementSelected = iterationResult.elementSelected;
+tel
+-- end of node produitBool__selectElementOfRank_inArray_
+
+node produitBool__shiftFill(
+	acc_in:produitBool::Tacc_inShift2 {multiplieur : bool^10;
+	rank : int;
+	actual_rank : int}) 
+returns (
+	acc_out:produitBool::Tacc_inShift2 {multiplieur : bool^10;
+	rank : int;
+	actual_rank : int};
+	elt_out:bool);
+let
+    acc_out =
+	Tacc_inShift2{multiplieur=acc_in.multiplieur;rank=acc_in.rank;actual_rank=(acc_in.actual_rank
+	 + 1)};
+    elt_out =  if (((acc_in.actual_rank >= acc_in.rank) and
+	(acc_in.actual_rank < (acc_in.rank + size)))) then
+	(produitBool__selectElementOfRank_inArray_((acc_in.actual_rank -
+	 acc_in.rank), acc_in.multiplieur)) else (false);
+tel
+-- end of node produitBool__shiftFill
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/ProduitBool/produitBool.lus
+node produitBool__shift(
+	acc_in:produitBool::Tacc_in {multiplieur : bool^10;
+	rank : int}) 
+returns (
+	ligne:bool^20);
+var
+   bidon:produitBool::Tacc_inShift2 {multiplieur : bool^10; rank : int; actual_rank : int};
+let
+    (bidon, ligne) = fill<<node produitBool__shiftFill, const
+	 20>>(Tacc_inShift2{multiplieur=acc_in.multiplieur;rank=acc_in.rank;actual_rank=0});
+tel
+-- end of node produitBool__shift
+
+node produitBool__produitBool(
+	multiplicande:bool^10;
+	multiplieur:bool^10) 
+returns (
+	matrice:bool^20^10);
+let
+   matrice = bool^20^10;
+tel
+-- end of node produitBool__produitBool
+
+node produitBool__PLC(
+	acc_in:produitBool::Tacc_in {multiplieur : bool^10;
+	rank : int};
+	multiplicande:bool) 
+returns (
+	acc_out:produitBool::Tacc_in {multiplieur : bool^10;
+	rank : int};
+	ligne:bool^20);
+let
+    ligne =  if ((multiplicande = false)) then (bool^20) else
+	 (produitBool__shift(acc_in));
+tel
+-- end of node produitBool__PLC
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/ProduitBool/shiftFill_ludic.lus
@@ -9906,27 +10131,27 @@ End of Syntax table dump. 
  * package shiftFill_ludic
 	Exported types:
 type shiftFill_ludic__T1_ARRAY = bool^10;
-type shiftFill_ludic__T4_STRUCT =  {multiplieur : bool^10; rank : int};
-type shiftFill_ludic__T6_STRUCT =  {eltToSearch : bool; iselementof : bool};
-type shiftFill_ludic__T5_STRUCT =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
-type shiftFill_ludic__t_Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
-type shiftFill_ludic__t_T_isElementOf_ =  {eltToSearch : bool; iselementof : bool};
-type shiftFill_ludic__T2_STRUCT =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shiftFill_ludic__t_Tacc_in =  {multiplieur : bool^10; rank : int};
-type shiftFill_ludic__t_Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shiftFill_ludic__T3_STRUCT =  {currentRank : int; rankToSelect : int; elementSelected : bool};
-type shiftFill_ludic__t_iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shiftFill_ludic__T4_STRUCT = shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int};
+type shiftFill_ludic__T6_STRUCT = shiftFill_ludic::T6_STRUCT {eltToSearch : bool; iselementof : bool};
+type shiftFill_ludic__T5_STRUCT = shiftFill_ludic::T5_STRUCT {acc_in_PLC : shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shiftFill_ludic__t_Tacc_inShift = shiftFill_ludic::T5_STRUCT {acc_in_PLC : shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shiftFill_ludic__t_T_isElementOf_ = shiftFill_ludic::T6_STRUCT {eltToSearch : bool; iselementof : bool};
+type shiftFill_ludic__T2_STRUCT = shiftFill_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shiftFill_ludic__t_Tacc_in = shiftFill_ludic::T4_STRUCT {multiplieur : bool^10; rank : int};
+type shiftFill_ludic__t_Tacc_inShift2 = shiftFill_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shiftFill_ludic__T3_STRUCT = shiftFill_ludic::T3_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shiftFill_ludic__t_iteratedStruct = shiftFill_ludic::T3_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 	Exported constants:
 const shiftFill_ludic__c_size = 10;
 	Exported nodes:
 
 node shiftFill_ludic__n_selectOneStage(
-	i_acc_in: {currentRank : int;
+	i_acc_in:shiftFill_ludic::T3_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool};
 	i_currentElt:bool) 
 returns (
-	o_acc_out: {currentRank : int;
+	o_acc_out:shiftFill_ludic::T3_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool});
 let
@@ -9943,7 +10168,7 @@ node shiftFill_ludic__n_selectElementOfRank_inArray_(
 returns (
 	o_elementSelected:bool);
 var
-   v_iterationResult: {currentRank : int; rankToSelect : int; elementSelected : bool};
+   v_iterationResult:shiftFill_ludic::T3_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 let
     v_iterationResult = red<<node shiftFill_ludic__n_selectOneStage, const
 	10>>(T3_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=i_array[0]},
@@ -9953,11 +10178,11 @@ tel
 -- end of node shiftFill_ludic__n_selectElementOfRank_inArray_
 
 node shiftFill_ludic__n_shiftFill(
-	i_acc_in: {multiplieur : bool^10;
+	i_acc_in:shiftFill_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int}) 
 returns (
-	o_acc_out: {multiplieur : bool^10;
+	o_acc_out:shiftFill_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int};
 	o_elt_out:bool);
@@ -10011,28 +10236,28 @@ End of Syntax table dump. 
  * package shift_ludic
 	Exported types:
 type shift_ludic__T1_ARRAY = bool^10;
-type shift_ludic__T4_STRUCT =  {currentRank : int; rankToSelect : int; elementSelected : bool};
-type shift_ludic__T5_STRUCT =  {multiplieur : bool^10; rank : int};
-type shift_ludic__T6_STRUCT =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shift_ludic__T4_STRUCT = shift_ludic::T4_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shift_ludic__T5_STRUCT = shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int};
+type shift_ludic__T6_STRUCT = shift_ludic::T6_STRUCT {acc_in_PLC : shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
 type shift_ludic__T3_ARRAY = bool^20;
-type shift_ludic__t_Tacc_inShift =  {acc_in_PLC :  {multiplieur : bool^10; rank : int}; actual_rank : int};
-type shift_ludic__T7_STRUCT =  {eltToSearch : bool; iselementof : bool};
-type shift_ludic__t_T_isElementOf_ =  {eltToSearch : bool; iselementof : bool};
-type shift_ludic__T2_STRUCT =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shift_ludic__t_Tacc_in =  {multiplieur : bool^10; rank : int};
-type shift_ludic__t_Tacc_inShift2 =  {multiplieur : bool^10; rank : int; actual_rank : int};
-type shift_ludic__t_iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : bool};
+type shift_ludic__t_Tacc_inShift = shift_ludic::T6_STRUCT {acc_in_PLC : shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int}; actual_rank : int};
+type shift_ludic__T7_STRUCT = shift_ludic::T7_STRUCT {eltToSearch : bool; iselementof : bool};
+type shift_ludic__t_T_isElementOf_ = shift_ludic::T7_STRUCT {eltToSearch : bool; iselementof : bool};
+type shift_ludic__T2_STRUCT = shift_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shift_ludic__t_Tacc_in = shift_ludic::T5_STRUCT {multiplieur : bool^10; rank : int};
+type shift_ludic__t_Tacc_inShift2 = shift_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
+type shift_ludic__t_iteratedStruct = shift_ludic::T4_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 	Exported constants:
 const shift_ludic__c_size = 10;
 	Exported nodes:
 
 node shift_ludic__n_selectOneStage(
-	i_acc_in: {currentRank : int;
+	i_acc_in:shift_ludic::T4_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool};
 	i_currentElt:bool) 
 returns (
-	o_acc_out: {currentRank : int;
+	o_acc_out:shift_ludic::T4_STRUCT {currentRank : int;
 	rankToSelect : int;
 	elementSelected : bool});
 let
@@ -10049,7 +10274,7 @@ node shift_ludic__n_selectElementOfRank_inArray_(
 returns (
 	o_elementSelected:bool);
 var
-   v_iterationResult: {currentRank : int; rankToSelect : int; elementSelected : bool};
+   v_iterationResult:shift_ludic::T4_STRUCT {currentRank : int; rankToSelect : int; elementSelected : bool};
 let
     v_iterationResult = red<<node shift_ludic__n_selectOneStage, const
 	10>>(T4_STRUCT{currentRank=0;rankToSelect=i_rankToSelect;elementSelected=i_array[0]},
@@ -10059,11 +10284,11 @@ tel
 -- end of node shift_ludic__n_selectElementOfRank_inArray_
 
 node shift_ludic__n_shiftFill(
-	i_acc_in: {multiplieur : bool^10;
+	i_acc_in:shift_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int}) 
 returns (
-	o_acc_out: {multiplieur : bool^10;
+	o_acc_out:shift_ludic::T2_STRUCT {multiplieur : bool^10;
 	rank : int;
 	actual_rank : int};
 	o_elt_out:bool);
@@ -10079,12 +10304,12 @@ tel
 -- end of node shift_ludic__n_shiftFill
 
 node shift_ludic__n_shift(
-	i_acc_in: {multiplieur : bool^10;
+	i_acc_in:shift_ludic::T5_STRUCT {multiplieur : bool^10;
 	rank : int}) 
 returns (
 	o_ligne:bool^20);
 var
-   v_bidon: {multiplieur : bool^10; rank : int; actual_rank : int};
+   v_bidon:shift_ludic::T2_STRUCT {multiplieur : bool^10; rank : int; actual_rank : int};
 let
     (v_bidon, o_ligne) = fill<<node shift_ludic__n_shiftFill, const
 	 20>>(T2_STRUCT{multiplieur=i_acc_in.multiplieur;rank=i_acc_in.rank;actual_rank=0});
@@ -10247,15 +10472,63 @@ End of Syntax table dump. 
 const calculs_max__taille = 10;
 type calculs_max__bool_arrays = bool^10;
 type calculs_max__int_arrays = int^10;
-type calculs_max__struct_fill_bool =  {imax1 : int; imax2 : int; icourant : int};
-type calculs_max__struct_max =  {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int};
-	Exported constants:
-	Exported nodes:
-
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/calculs_max.lus
+type calculs_max__struct_fill_bool = calculs_max::struct_fill_bool {imax1 : int; imax2 : int; icourant : int};
+type calculs_max__struct_max = calculs_max::struct_max {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int};
+	Exported constants:
+	Exported nodes:
+
+node calculs_max__max(
+	strin:calculs_max::struct_max {max1 : int;
+	max2 : int;
+	imax1 : int;
+	imax2 : int;
+	icourant : int};
+	ecourant:int) 
+returns (
+	strout:calculs_max::struct_max {max1 : int;
+	max2 : int;
+	imax1 : int;
+	imax2 : int;
+	icourant : int});
+let
+    strout =  if ((ecourant <= strin.max2)) then
+	(struct_max{max1=strin.max1;max2=strin.max2;imax1=strin.imax1;imax2=strin.imax2;icourant=(strin.icourant
+	+ 1)}) else ( if (((ecourant > strin.max2) and (ecourant <= strin.max1)))
+	then
+	(struct_max{max1=strin.max1;max2=ecourant;imax1=strin.imax1;imax2=strin.icourant;icourant=(strin.icourant
+	+ 1)}) else
+	(struct_max{max1=ecourant;max2=strin.max1;imax1=strin.icourant;imax2=strin.imax1;icourant=(strin.icourant
+	 + 1)}));
+tel
+-- end of node calculs_max__max
+
+node calculs_max__fill_bool(
+	s_in:calculs_max::struct_fill_bool {imax1 : int;
+	imax2 : int;
+	icourant : int}) 
+returns (
+	s_out:calculs_max::struct_fill_bool {imax1 : int;
+	imax2 : int;
+	icourant : int};
+	elt:bool);
+let
+    s_out =
+	struct_fill_bool{imax1=s_in.imax1;imax2=s_in.imax2;icourant=(s_in.icourant
+	 + 1)};
+   elt = ((s_in.icourant = s_in.imax1) or (s_in.icourant = s_in.imax2));
+tel
+-- end of node calculs_max__fill_bool
+node calculs_max__calculs_max(A:int^10) returns (res:bool^10);
+var
+   local_struct:calculs_max::struct_max {max1 : int; max2 : int; imax1 : int; imax2 : int; icourant : int};
+   tmp:calculs_max::struct_fill_bool {imax1 : int; imax2 : int; icourant : int};
+let
+    local_struct = red<<node calculs_max__max, const
+	 10>>(struct_max{max1=0;max2=0;imax1=-(1);imax2=-(1);icourant=0}, A);
+    (tmp, res) = fill<<node calculs_max__fill_bool, const
+	 10>>(struct_fill_bool{imax1=local_struct.imax1;imax2=local_struct.imax2;icourant=0});
+tel
+-- end of node calculs_max__calculs_max
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/deSimone.lus
@@ -10287,14 +10560,59 @@ End of Syntax table dump. 
 	Exported types:
 const deSimone__size = 10;
 type deSimone__tabType = bool^10;
-type deSimone__cell_accu =  {token : bool; grant : bool};
+type deSimone__cell_accu = deSimone::cell_accu {token : bool; grant : bool};
 	Exported constants:
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node deSimone__oneCell(
+	accu_in:deSimone::cell_accu {token : bool;
+	grant : bool};
+	req:bool) 
+returns (
+	accu_out:deSimone::cell_accu {token : bool;
+	grant : bool};
+	ackout:bool);
+let
+    ackout = (((req and accu_in.token) and accu_in.grant) and not(false ->
+	 pre(ackout)));
+    accu_out = cell_accu{token=accu_in.token;grant=(not(req) and
+	 accu_in.grant)};
+tel
+-- end of node deSimone__oneCell
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/deSimone.lus
+node deSimone__prop1_iter(
+	accu_in:int;
+	elt_in:bool) 
+returns (
+	accu_out:int);
+let
+   accu_out = (accu_in +  if (elt_in) then (1) else (0));
+tel
+-- end of node deSimone__prop1_iter
+
+node deSimone__deSimone(
+	new_token:bool;
+	request:bool^10) 
+returns (
+	acknowledge:bool^10);
+var
+   accu_out:deSimone::cell_accu {token : bool; grant : bool};
+let
+    (accu_out, acknowledge) = fillred<<node deSimone__oneCell, const
+	 10>>(cell_accu{token=new_token;grant=true}, request);
+tel
+-- end of node deSimone__deSimone
+node deSimone__prop1(request:bool^10) returns (ok:bool);
+var
+   acknowledge:bool^10;
+   nb_acknowledge:int;
+let
+   acknowledge = deSimone__deSimone(request);
+    nb_acknowledge = red<<node deSimone__prop1_iter, const 10>>(0,
+	 acknowledge);
+   ok = (nb_acknowledge <= 1);
+tel
+-- end of node deSimone__prop1
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/iterFibo.lus
@@ -10594,15 +10912,34 @@ End of Syntax table dump. 
 *** Dump the exported items of the packages.
  * package moyenne
 	Exported types:
-type moyenne__moyenne_accu =  {sum : real; moyenne : real; rank : real};
+type moyenne__moyenne_accu = moyenne::moyenne_accu {sum : real; moyenne : real; rank : real};
 	Exported constants:
 const moyenne__size = 10;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
-
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/moyenne.lus
+node moyenne__moyenne_step(
+	accu_in:moyenne::moyenne_accu {sum : real;
+	moyenne : real;
+	rank : real};
+	elt_in:real) 
+returns (
+	accu_out:moyenne::moyenne_accu {sum : real;
+	moyenne : real;
+	rank : real});
+let
+    accu_out = moyenne_accu{sum=(accu_in.sum + elt_in);moyenne=((accu_in.sum +
+	 elt_in) / (accu_in.rank + 1.0));rank=(accu_in.rank + 1.0)};
+tel
+-- end of node moyenne__moyenne_step
+node moyenne__moyenne(Tab:real^10) returns (moy:real);
+var
+   accu_out:moyenne::moyenne_accu {sum : real; moyenne : real; rank : real};
+let
+    accu_out = red<<node moyenne__moyenne_step, const
+	 10>>(moyenne_accu{sum=0.0;moyenne=0.0;rank=0.0}, Tab);
+   moy = accu_out.moyenne;
+tel
+-- end of node moyenne__moyenne
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/normal.lus
@@ -10675,13 +11012,13 @@ const normal__NBC = 20;
 type normal__INTNBC = int^20;
 const normal__NBG = 4;
 type normal__INTNBG = int^4;
-type normal__T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
+type normal__T_EntreeGlob = normal::T_EntreeGlob {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
 type normal__T_ComChg = int;
-type normal__T_InfoGenIndiv =  {mesure_gen : int};
+type normal__T_InfoGenIndiv = normal::T_InfoGenIndiv {mesure_gen : int};
 type normal__T_EtatCharge = int;
-type normal__T_InfoChgGlob =  {chg2gen : int^20};
-type normal__T_InfoChgIndiv =  {mesure_chg : int};
-type normal__T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20};
+type normal__T_InfoChgGlob = normal::T_InfoChgGlob {chg2gen : int^20};
+type normal__T_InfoChgIndiv = normal::T_InfoChgIndiv {mesure_chg : int};
+type normal__T_InfoGenGlob = normal::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20};
 	Exported constants:
 const normal__EC_LESTAGE = 3;
 const normal__COM_ON = 1;
@@ -10693,10 +11030,339 @@ const normal__EC_ON = 0;
 const normal__COM_ERR = 0;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node normal__int2InfoChgIndiv(
+	m:int) 
+returns (
+	InfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int});
+let
+   InfoChgIndiv = T_InfoChgIndiv{mesure_chg=m};
+tel
+-- end of node normal__int2InfoChgIndiv
+
+node normal__extract_tab_info_chg_indiv(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20);
+let
+    TabInfoChgIndiv = map<<node normal__int2InfoChgIndiv, const
+	 20>>(EntreeGlob.mesure_chgs);
+tel
+-- end of node normal__extract_tab_info_chg_indiv
+
+node normal__int2InfoGenIndiv(
+	m:int) 
+returns (
+	InfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int});
+let
+   InfoGenIndiv = T_InfoGenIndiv{mesure_gen=m};
+tel
+-- end of node normal__int2InfoGenIndiv
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/normal.lus
+node normal__extract_tab_info_gen_indiv(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4);
+let
+    TabInfoGenIndiv = map<<node normal__int2InfoGenIndiv, const
+	 4>>(EntreeGlob.mesure_gens);
+tel
+-- end of node normal__extract_tab_info_gen_indiv
+node normal__egal_indice(indice:int; val:int) returns (r:bool);
+let
+   r = (val = indice);
+tel
+-- end of node normal__egal_indice
+node normal__copie(acc_in:int) returns (acc_out:int; elt:int);
+let
+   acc_out = acc_in;
+   elt = acc_in;
+tel
+-- end of node normal__copie
+
+node normal__essai_traite_gen(
+	indice_gen:int;
+	infoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	TabComVal:bool^20);
+var
+   Tab_indiceGen:int^20;
+   bid:int;
+let
+   (bid, Tab_indiceGen) = fill<<node normal__copie, const 20>>(indice_gen);
+    TabComVal = map<<node normal__egal_indice, const 20>>(Tab_indiceGen,
+	 infoGenGlob.chg2gen);
+tel
+-- end of node normal__essai_traite_gen
+
+node normal__fusion_une_com(
+	in_com:int;
+	cur_com:int;
+	cur_val:bool) 
+returns (
+	out_com:int);
+let
+   out_com =  if (cur_val) then (cur_com) else (in_com);
+tel
+-- end of node normal__fusion_une_com
+
+node normal__fusion_tab_com(
+	acc_in:int^20;
+	TabCom:int^20;
+	TabVal:bool^20) 
+returns (
+	acc_out:int^20);
+let
+    acc_out = map<<node normal__fusion_une_com, const 20>>(acc_in, TabCom,
+	 TabVal);
+tel
+-- end of node normal__fusion_tab_com
+
+node normal__fusion_com(
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4) 
+returns (
+	TabComChg:int^20);
+var
+   Vide:int^20;
+let
+   Vide = int^20;
+    TabComChg = red<<node normal__fusion_tab_com, const 4>>(Vide,
+	 AllTabComChg, AllTabComVal);
+tel
+-- end of node normal__fusion_com
+
+node normal__traite_genCore_itere(
+	acc_in:int;
+	elt1:bool;
+	elt2:int) 
+returns (
+	acc_out:int;
+	elt:int);
+let
+   elt =  if (elt1) then (elt2) else (acc_in);
+   acc_out = acc_in;
+tel
+-- end of node normal__traite_genCore_itere
+
+node normal__essai2(
+	a:int^20;
+	d:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	c:bool^20);
+let
+   c = map<<node normal__egal_indice, const 20>>(a, d.chg2gen);
+tel
+-- end of node normal__essai2
+node normal__id(elt_in:int) returns (elt_out:int);
+let
+   elt_out = elt_in;
+tel
+-- end of node normal__id
+
+node normal__extract_info_chg_glob(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20});
+let
+    InfoChgGlob = T_InfoChgGlob{chg2gen=map<<node normal__id, const
+	 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node normal__extract_info_chg_glob
+
+node normal__extrCharge(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}^20);
+let
+   TabInfoChgIndiv = normal__extract_tab_info_chg_indiv(EntreeGlob);
+   TabInfoChgGlob = normal::T_InfoChgGlob {chg2gen : int^20}^20;
+tel
+-- end of node normal__extrCharge
+node normal__trChItere(acc_in:int; elt:int) returns (acc_out:int);
+let
+   acc_out =  if ((acc_in > elt)) then (acc_in) else (elt);
+tel
+-- end of node normal__trChItere
+
+node normal__essai3(
+	indice:int^20;
+	info:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	Connerie:bool^20);
+let
+    Connerie = map<<node normal__egal_indice, const 20>>(indice,
+	 info.chg2gen);
+tel
+-- end of node normal__essai3
+
+node normal__traite_gen_core(
+	indice_gen:int;
+	InfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20;
+	TabComVal:bool^20) 
+returns (
+	TabComChg:int^20);
+var
+   bidon:int;
+let
+    (bidon, TabComChg) = fillred<<node normal__traite_genCore_itere, const
+	 20>>(indice_gen, TabComVal, InfoGenGlob.chg2gen);
+tel
+-- end of node normal__traite_gen_core
+
+node normal__traite_gen(
+	indice_gen:int;
+	InfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20) 
+returns (
+	TabComChg:int^20;
+	TabComVal:bool^20);
+var
+   TabComVal_bis:bool^20;
+   TabIndiceGen:int^20;
+   bid:int;
+let
+    TabComVal_bis = map<<node normal__egal_indice, const 20>>(TabIndiceGen,
+	 InfoGenGlob.chg2gen);
+   (bid, TabIndiceGen) = fill<<node normal__copie, const 20>>(indice_gen);
+    TabComChg = normal__traite_gen_core(indice_gen, InfoGenIndiv, InfoGenGlob,
+	 TabEtatCharge, TabComVal_bis);
+    TabComVal = map<<node normal__egal_indice, const 20>>(TabIndiceGen,
+	 InfoGenGlob.chg2gen);
+tel
+-- end of node normal__traite_gen
+
+node normal__extract_info_gen_glob(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20});
+let
+    InfoGenGlob = T_InfoGenGlob{elt_bidon=0;chg2gen=map<<node normal__id,
+	 const 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node normal__extract_info_gen_glob
+
+node normal__traite_charge(
+	InfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int};
+	InfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}) 
+returns (
+	EtatCharge:int);
+let
+    EtatCharge = red<<node normal__trChItere, const
+	 20>>(InfoChgIndiv.mesure_chg, InfoChgGlob.chg2gen);
+tel
+-- end of node normal__traite_charge
+node normal__incr_acc(acc_in:int) returns (acc_out:int; res:int);
+let
+   res = acc_in;
+   acc_out = (res + 1);
+tel
+-- end of node normal__incr_acc
+
+node normal__extrGen(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabIndiceGen:int^4);
+var
+   bid:int;
+let
+   TabInfoGenIndiv = normal__extract_tab_info_gen_indiv(EntreeGlob);
+    TabInfoGenGlob = normal::T_InfoGenGlob {elt_bidon : int; chg2gen :
+	 int^20}^4;
+   (bid, TabIndiceGen) = fill<<node normal__incr_acc, const 4>>(0);
+tel
+-- end of node normal__extrGen
+
+node normal__traiteGen(
+	TabIndiceGen:int^4;
+	TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabEtatCharge:int^20) 
+returns (
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4);
+let
+    (AllTabComChg, AllTabComVal) = map<<node normal__traite_gen, const
+	 4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, int^20^4);
+tel
+-- end of node normal__traiteGen
+
+node normal__traiteChg(
+	TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}^20) 
+returns (
+	TabEtatCharge:int^20);
+let
+    TabEtatCharge = map<<node normal__traite_charge, const
+	 20>>(TabInfoChgIndiv, TabInfoChgGlob);
+tel
+-- end of node normal__traiteChg
+
+node normal__normal(
+	EntreeGlob:normal::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabComChg:int^20);
+var
+   TabInfoChgIndiv:normal::T_InfoChgIndiv {mesure_chg : int}^20;
+   TabInfoChgGlob:normal::T_InfoChgGlob {chg2gen : int^20}^20;
+   TabEtatCharge:int^20;
+   TabInfoGenIndiv:normal::T_InfoGenIndiv {mesure_gen : int}^4;
+   TabInfoGenGlob:normal::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20}^4;
+   TabIndiceGen:int^4;
+   AllTabComChg:int^20^4;
+   AllTabComVal:bool^20^4;
+let
+   (TabInfoChgIndiv, TabInfoChgGlob) = normal__extrCharge(EntreeGlob);
+   TabEtatCharge = normal__traiteChg(TabInfoChgIndiv, TabInfoChgGlob);
+    (TabInfoGenIndiv, TabInfoGenGlob, TabIndiceGen) =
+	 normal__extrGen(EntreeGlob);
+    (AllTabComChg, AllTabComVal) = normal__traiteGen(TabIndiceGen,
+	 TabInfoGenIndiv, TabInfoGenGlob, TabEtatCharge);
+   TabComChg = normal__fusion_com(AllTabComChg, AllTabComVal);
+tel
+-- end of node normal__normal
+
+node normal__traite_gen_bis(
+	a:int;
+	c:normal::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}) 
+returns (
+	e:bool^20);
+var
+   loc_a:int^20;
+   bid:int;
+let
+   (bid, loc_a) = fill<<node normal__copie, const 20>>(a);
+   e = map<<node normal__egal_indice, const 20>>(loc_a, c.chg2gen);
+tel
+-- end of node normal__traite_gen_bis
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/pipeline.lus
@@ -11032,15 +11698,15 @@ const testSilus__NBC = 20;
 type testSilus__INTNBC = int^20;
 const testSilus__NBG = 4;
 type testSilus__INTNBG = int^4;
-type testSilus__T_EntreeGlob =  {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
+type testSilus__T_EntreeGlob = testSilus::T_EntreeGlob {chg2gen : int^20; mesure_chgs : int^20; mesure_gens : int^4};
 type testSilus__T_ComChg = int;
-type testSilus__T_InfoGenIndiv =  {mesure_gen : int};
+type testSilus__T_InfoGenIndiv = testSilus::T_InfoGenIndiv {mesure_gen : int};
 type testSilus__BOOLNBC = bool^20;
 type testSilus__T_EtatCharge = int;
-type testSilus__T_InfoChgGlob =  {chg2gen : int^20};
-type testSilus__T_InfoChgIndiv =  {mesure_chg : int};
+type testSilus__T_InfoChgGlob = testSilus::T_InfoChgGlob {chg2gen : int^20};
+type testSilus__T_InfoChgIndiv = testSilus::T_InfoChgIndiv {mesure_chg : int};
 type testSilus__T_ComChgNBC = int^20;
-type testSilus__T_InfoGenGlob =  {elt_bidon : int; chg2gen : int^20};
+type testSilus__T_InfoGenGlob = testSilus::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20};
 	Exported constants:
 const testSilus__EC_LESTAGE = 3;
 const testSilus__COM_ON = 1;
@@ -11052,10 +11718,283 @@ const testSilus__EC_ON = 0;
 const testSilus__COM_ERR = 0;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node testSilus__int2InfoChgIndiv(
+	m:int) 
+returns (
+	InfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int});
+let
+   InfoChgIndiv = T_InfoChgIndiv{mesure_chg=m};
+tel
+-- end of node testSilus__int2InfoChgIndiv
+
+node testSilus__extract_tab_info_chg_indiv(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20);
+let
+    TabInfoChgIndiv = map<<node testSilus__int2InfoChgIndiv, const
+	 20>>(EntreeGlob.mesure_chgs);
+tel
+-- end of node testSilus__extract_tab_info_chg_indiv
+
+node testSilus__int2InfoGenIndiv(
+	m:int) 
+returns (
+	InfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int});
+let
+   InfoGenIndiv = T_InfoGenIndiv{mesure_gen=m};
+tel
+-- end of node testSilus__int2InfoGenIndiv
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/testSilus.lus
+node testSilus__extract_tab_info_gen_indiv(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4);
+let
+    TabInfoGenIndiv = map<<node testSilus__int2InfoGenIndiv, const
+	 4>>(EntreeGlob.mesure_gens);
+tel
+-- end of node testSilus__extract_tab_info_gen_indiv
+node testSilus__egal_indice(indice:int; val:int) returns (r:bool);
+let
+   r = (val = indice);
+tel
+-- end of node testSilus__egal_indice
+node testSilus__copie(acc_in:int) returns (acc_out:int; elt:int);
+let
+   acc_out = acc_in;
+   elt = acc_in;
+tel
+-- end of node testSilus__copie
+
+node testSilus__fusion_une_com(
+	in_com:int;
+	cur_com:int;
+	cur_val:bool) 
+returns (
+	out_com:int);
+let
+   out_com =  if (cur_val) then (cur_com) else (in_com);
+tel
+-- end of node testSilus__fusion_une_com
+
+node testSilus__fusion_tab_com(
+	acc_in:int^20;
+	TabCom:int^20;
+	TabVal:bool^20) 
+returns (
+	acc_out:int^20);
+let
+    acc_out = map<<node testSilus__fusion_une_com, const 20>>(acc_in, TabCom,
+	 TabVal);
+tel
+-- end of node testSilus__fusion_tab_com
+
+node testSilus__fusion_com(
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4) 
+returns (
+	TabComChg:int^20);
+var
+   Vide:int^20;
+let
+   Vide = int^20;
+    TabComChg = red<<node testSilus__fusion_tab_com, const 4>>(Vide,
+	 AllTabComChg, AllTabComVal);
+tel
+-- end of node testSilus__fusion_com
+
+node testSilus__traite_genCore_itere(
+	acc_in:int;
+	elt1:bool;
+	elt2:int) 
+returns (
+	acc_out:int;
+	elt:int);
+let
+   elt =  if (elt1) then (elt2) else (acc_in);
+   acc_out = acc_in;
+tel
+-- end of node testSilus__traite_genCore_itere
+node testSilus__id(elt_in:int) returns (elt_out:int);
+let
+   elt_out = elt_in;
+tel
+-- end of node testSilus__id
+
+node testSilus__extract_info_chg_glob(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20});
+let
+    InfoChgGlob = T_InfoChgGlob{chg2gen=map<<node testSilus__id, const
+	 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node testSilus__extract_info_chg_glob
+
+node testSilus__extrCharge(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}^20);
+let
+   TabInfoChgIndiv = testSilus__extract_tab_info_chg_indiv(EntreeGlob);
+   TabInfoChgGlob = testSilus::T_InfoChgGlob {chg2gen : int^20}^20;
+tel
+-- end of node testSilus__extrCharge
+node testSilus__trChItere(acc_in:int; elt:int) returns (acc_out:int);
+let
+   acc_out =  if ((acc_in > elt)) then (acc_in) else (elt);
+tel
+-- end of node testSilus__trChItere
+
+node testSilus__traite_gen_core(
+	indice_gen:int;
+	InfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20;
+	TabComVal:bool^20) 
+returns (
+	TabComChg:int^20);
+var
+   bidon:int;
+let
+    (bidon, TabComChg) = fillred<<node testSilus__traite_genCore_itere, const
+	 20>>(indice_gen, TabComVal, InfoGenGlob.chg2gen);
+tel
+-- end of node testSilus__traite_gen_core
+
+node testSilus__traite_gen(
+	indice_gen:int;
+	InfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int};
+	InfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20};
+	TabEtatCharge:int^20) 
+returns (
+	TabComChg:int^20;
+	TabComVal:bool^20);
+var
+   TabIndiceGen:int^20;
+   bidon:int;
+let
+    TabComChg = testSilus__traite_gen_core(indice_gen, InfoGenIndiv,
+	 InfoGenGlob, TabEtatCharge, TabComVal);
+    TabComVal = map<<node testSilus__egal_indice, const 20>>(TabIndiceGen,
+	 InfoGenGlob.chg2gen);
+    (bidon, TabIndiceGen) = fill<<node testSilus__copie, const
+	 20>>(indice_gen);
+tel
+-- end of node testSilus__traite_gen
+
+node testSilus__extract_info_gen_glob(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	InfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20});
+let
+    InfoGenGlob = T_InfoGenGlob{elt_bidon=0;chg2gen=map<<node testSilus__id,
+	 const 20>>(EntreeGlob.chg2gen)};
+tel
+-- end of node testSilus__extract_info_gen_glob
+
+node testSilus__traite_charge(
+	InfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int};
+	InfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}) 
+returns (
+	EtatCharge:int);
+let
+    EtatCharge = red<<node testSilus__trChItere, const
+	 20>>(InfoChgIndiv.mesure_chg, InfoChgGlob.chg2gen);
+tel
+-- end of node testSilus__traite_charge
+
+node testSilus__traiteChg(
+	TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20;
+	TabInfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}^20) 
+returns (
+	TabEtatCharge:int^20);
+let
+    TabEtatCharge = map<<node testSilus__traite_charge, const
+	 20>>(TabInfoChgIndiv, TabInfoChgGlob);
+tel
+-- end of node testSilus__traiteChg
+node testSilus__incr_acc(acc_in:int) returns (acc_out:int; res:int);
+let
+   res = acc_in;
+   acc_out = (res + 1);
+tel
+-- end of node testSilus__incr_acc
+
+node testSilus__extrGen(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabIndiceGen:int^4);
+var
+   bidon:int;
+let
+   TabInfoGenIndiv = testSilus__extract_tab_info_gen_indiv(EntreeGlob);
+    TabInfoGenGlob = testSilus::T_InfoGenGlob {elt_bidon : int; chg2gen :
+	 int^20}^4;
+   (bidon, TabIndiceGen) = fill<<node testSilus__incr_acc, const 4>>(0);
+tel
+-- end of node testSilus__extrGen
+
+node testSilus__traiteGen(
+	TabIndiceGen:int^4;
+	TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4;
+	TabInfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int;
+	chg2gen : int^20}^4;
+	TabEtatCharge:int^20) 
+returns (
+	AllTabComChg:int^20^4;
+	AllTabComVal:bool^20^4);
+let
+    (AllTabComChg, AllTabComVal) = map<<node testSilus__traite_gen, const
+	 4>>(TabIndiceGen, TabInfoGenIndiv, TabInfoGenGlob, int^20^4);
+tel
+-- end of node testSilus__traiteGen
+
+node testSilus__testSilus(
+	EntreeGlob:testSilus::T_EntreeGlob {chg2gen : int^20;
+	mesure_chgs : int^20;
+	mesure_gens : int^4}) 
+returns (
+	TabComChg:int^20);
+var
+   TabInfoChgIndiv:testSilus::T_InfoChgIndiv {mesure_chg : int}^20;
+   TabInfoChgGlob:testSilus::T_InfoChgGlob {chg2gen : int^20}^20;
+   TabEtatCharge:int^20;
+   TabInfoGenIndiv:testSilus::T_InfoGenIndiv {mesure_gen : int}^4;
+   TabInfoGenGlob:testSilus::T_InfoGenGlob {elt_bidon : int; chg2gen : int^20}^4;
+   TabIndiceGen:int^4;
+   AllTabComChg:int^20^4;
+   AllTabComVal:bool^20^4;
+let
+   (TabInfoChgIndiv, TabInfoChgGlob) = testSilus__extrCharge(EntreeGlob);
+   TabEtatCharge = testSilus__traiteChg(TabInfoChgIndiv, TabInfoChgGlob);
+    (TabInfoGenIndiv, TabInfoGenGlob, TabIndiceGen) =
+	 testSilus__extrGen(EntreeGlob);
+    (AllTabComChg, AllTabComVal) = testSilus__traiteGen(TabIndiceGen,
+	 TabInfoGenIndiv, TabInfoGenGlob, TabEtatCharge);
+   TabComChg = testSilus__fusion_com(AllTabComChg, AllTabComVal);
+tel
+-- end of node testSilus__testSilus
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/lionel/triSel.lus
@@ -11094,18 +12033,136 @@ End of Syntax table dump. 
 	Exported types:
 const triSel__size = 50;
 type triSel__tabSize = int^50;
-type triSel__Sort_accu =  {CurrentRank : int; Tab : int^50};
-type triSel__Select_accu =  {RankToFind : int; CurrentRank : int; Val : int};
-type triSel__MinFR_accu =  {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
-type triSel__sorted_iter_accu =  {prev_elt : int; prop_is_tt : bool};
-type triSel__Exchange_accu =  {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+type triSel__Sort_accu = triSel::Sort_accu {CurrentRank : int; Tab : int^50};
+type triSel__Select_accu = triSel::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+type triSel__MinFR_accu = triSel::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+type triSel__sorted_iter_accu = triSel::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
+type triSel__Exchange_accu = triSel::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
 	Exported constants:
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node triSel__minFromRank(
+	accu_in:triSel::MinFR_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	Rank : int};
+	TabEltIn:int) 
+returns (
+	accu_out:triSel::MinFR_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	Rank : int});
+let
+    accu_out = MinFR_accu{MinVal= if (((accu_in.Rank = 0) or (accu_in.Rank =
+	accu_in.RankFrom))) then (TabEltIn) else ( if ((accu_in.Rank >=
+	accu_in.RankFrom)) then ( if ((TabEltIn < accu_in.MinVal)) then (TabEltIn)
+	else (accu_in.MinVal)) else (accu_in.MinVal));MinRank= if (((accu_in.Rank =
+	0) or (accu_in.Rank = accu_in.RankFrom))) then (accu_in.Rank) else ( if
+	((accu_in.Rank >= accu_in.RankFrom)) then ( if ((TabEltIn <
+	accu_in.MinVal)) then (accu_in.Rank) else (accu_in.MinRank)) else
+	 (accu_in.MinRank));RankFrom=accu_in.RankFrom;Rank=(accu_in.Rank + 1)};
+tel
+-- end of node triSel__minFromRank
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/lionel/triSel.lus
+node triSel__select(
+	accu_in:triSel::Select_accu {RankToFind : int;
+	CurrentRank : int;
+	Val : int};
+	elt:int) 
+returns (
+	accu_out:triSel::Select_accu {RankToFind : int;
+	CurrentRank : int;
+	Val : int});
+let
+    accu_out =
+	Select_accu{RankToFind=accu_in.RankToFind;CurrentRank=(accu_in.CurrentRank
+	+ 1);Val= if ((accu_in.RankToFind = accu_in.CurrentRank)) then (elt) else
+	 (accu_in.Val)};
+tel
+-- end of node triSel__select
+
+node triSel__Exchange_i_j(
+	accu_in:triSel::Exchange_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	CurrentVal : int;
+	Rank : int};
+	eltIn:int) 
+returns (
+	accu_out:triSel::Exchange_accu {MinVal : int;
+	MinRank : int;
+	RankFrom : int;
+	CurrentVal : int;
+	Rank : int};
+	eltOut:int);
+let
+    accu_out =
+	Exchange_accu{MinVal=accu_in.MinVal;MinRank=accu_in.MinRank;RankFrom=accu_in.RankFrom;CurrentVal=accu_in.CurrentVal;Rank=(accu_in.Rank
+	 + 1)};
+    eltOut =  if ((accu_in.Rank = accu_in.MinRank)) then (accu_in.CurrentVal)
+	else ( if ((accu_in.Rank = accu_in.RankFrom)) then (accu_in.MinVal) else
+	 (eltIn));
+tel
+-- end of node triSel__Exchange_i_j
+
+node triSel__UnarySort(
+	accu_in:triSel::Sort_accu {CurrentRank : int;
+	Tab : int^50};
+	eltIn:int) 
+returns (
+	accu_out:triSel::Sort_accu {CurrentRank : int;
+	Tab : int^50});
+var
+   accu_out_select:triSel::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+   accu_out_min:triSel::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+   accu_out_exchange:triSel::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+   localTab:int^50;
+let
+    accu_out_min = red<<node triSel__minFromRank, const
+	50>>(MinFR_accu{MinVal=0;MinRank=0;RankFrom=accu_in.CurrentRank;Rank=0},
+	 accu_in.Tab);
+    accu_out_select = red<<node triSel__select, const
+	50>>(Select_accu{RankToFind=accu_in.CurrentRank;CurrentRank=0;Val=0},
+	 accu_in.Tab);
+    (accu_out_exchange, localTab) = fillred<<node triSel__Exchange_i_j, const
+	50>>(Exchange_accu{MinVal=accu_out_min.MinVal;MinRank=accu_out_min.MinRank;RankFrom=accu_out_select.RankToFind;CurrentVal=accu_out_select.Val;Rank=0},
+	 accu_in.Tab);
+   accu_out = Sort_accu{CurrentRank=(accu_in.CurrentRank + 1);Tab=localTab};
+tel
+-- end of node triSel__UnarySort
+node triSel__triSel(TIn:int^50) returns (TSorted:int^50);
+var
+   UnarySort_accu_out:triSel::Sort_accu {CurrentRank : int; Tab : int^50};
+let
+    UnarySort_accu_out = red<<node triSel__UnarySort, const
+	 50>>(Sort_accu{CurrentRank=0;Tab=TIn}, TIn);
+   TSorted = UnarySort_accu_out.Tab;
+tel
+-- end of node triSel__triSel
+
+node triSel__sorted_iter(
+	accu_in:triSel::sorted_iter_accu {prev_elt : int;
+	prop_is_tt : bool};
+	elt:int) 
+returns (
+	accu_out:triSel::sorted_iter_accu {prev_elt : int;
+	prop_is_tt : bool});
+let
+    accu_out = sorted_iter_accu{prev_elt=elt;prop_is_tt=((accu_in.prev_elt <=
+	 elt) and accu_in.prop_is_tt)};
+tel
+-- end of node triSel__sorted_iter
+node triSel__Sorted(TIn:int^50) returns (ok:bool);
+var
+   accu_out:triSel::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
+   TSorted:int^50;
+let
+   TSorted = triSel__triSel(TIn);
+    accu_out = red<<node triSel__sorted_iter, const
+	 50>>(sorted_iter_accu{prev_elt=0;prop_is_tt=true}, TSorted);
+   ok = accu_out.prop_is_tt;
+tel
+-- end of node triSel__Sorted
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/packEnvTest/Condact.lus
@@ -11140,15 +12197,43 @@ End of Syntax table dump. 
  * package contractForElementSelectionInArray
 	Exported types:
 type contractForElementSelectionInArray__elementType = int;
-type contractForElementSelectionInArray__iteratedStruct =  {currentRank : int; rankToSelect : int; elementSelected : int};
+type contractForElementSelectionInArray__iteratedStruct = contractForElementSelectionInArray::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : int};
 	Exported constants:
 const contractForElementSelectionInArray__size = 10;
 	Exported nodes:
 
-	XXX evalType.ml:anonymous struct not yet supported ->  finish me!
+node contractForElementSelectionInArray__selectOneStage(
+	acc_in:contractForElementSelectionInArray::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : int};
+	currentElt:int) 
+returns (
+	acc_out:contractForElementSelectionInArray::iteratedStruct {currentRank : int;
+	rankToSelect : int;
+	elementSelected : int});
+let
+    acc_out = iteratedStruct{currentRank=(acc_in.currentRank +
+	1);rankToSelect=acc_in.rankToSelect;elementSelected= if
+	((acc_in.currentRank = acc_in.rankToSelect)) then (currentElt) else
+	 (acc_in.elementSelected)};
+tel
+-- end of node contractForElementSelectionInArray__selectOneStage
 
-*** oops: an internal error occurred in file evalType.ml, line 159, column 3
-*** when compiling lustre program should_work/packEnvTest/contractForElementSelectionInArray/contractForElementSelectionInArray.lus
+node contractForElementSelectionInArray__selectEltInArray(
+	array:int^10;
+	rankToSelect:int) 
+returns (
+	elementSelected:int);
+var
+   iterationResult:contractForElementSelectionInArray::iteratedStruct {currentRank : int; rankToSelect : int; elementSelected : int};
+let
+    iterationResult = red<<node
+	contractForElementSelectionInArray__selectOneStage, const
+	10>>(iteratedStruct{currentRank=0;rankToSelect=rankToSelect;elementSelected=0},
+	 array);
+   elementSelected = iterationResult.elementSelected;
+tel
+-- end of node contractForElementSelectionInArray__selectEltInArray
 
 ----------------------------------------------------------------------
 ====> ../lus2lic -vl 3 --compile-all-items should_work/packEnvTest/contractForElementSelectionInArray/main.lus
@@ -11240,22 +12325,22 @@ End of Syntax table dump. 
 	Exported types:
 const tri__size = 10;
 type tri__INTSIZE = int^10;
-type tri__Sort_accu =  {CurrentRank : int; Tab : int^10};
-type tri__Select_accu =  {RankToFind : int; CurrentRank : int; Val : int};
-type tri__MinFR_accu =  {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
-type tri__sorted_iter_accu =  {prev_elt : int; prop_is_tt : bool};
-type tri__Exchange_accu =  {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+type tri__Sort_accu = tri::Sort_accu {CurrentRank : int; Tab : int^10};
+type tri__Select_accu = tri::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+type tri__MinFR_accu = tri::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+type tri__sorted_iter_accu = tri::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
+type tri__Exchange_accu = tri::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
 	Exported constants:
 	Exported nodes:
 
 node tri__minFromRank(
-	accu_in: {MinVal : int;
+	accu_in:tri::MinFR_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	Rank : int};
 	TabEltIn:int) 
 returns (
-	accu_out: {MinVal : int;
+	accu_out:tri::MinFR_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	Rank : int});
@@ -11270,12 +12355,12 @@ tel
 -- end of node tri__minFromRank
 
 node tri__select(
-	accu_in: {RankToFind : int;
+	accu_in:tri::Select_accu {RankToFind : int;
 	CurrentRank : int;
 	Val : int};
 	elt:int) 
 returns (
-	accu_out: {RankToFind : int;
+	accu_out:tri::Select_accu {RankToFind : int;
 	CurrentRank : int;
 	Val : int});
 let
@@ -11287,14 +12372,14 @@ tel
 -- end of node tri__select
 
 node tri__Exchange_i_j(
-	accu_in: {MinVal : int;
+	accu_in:tri::Exchange_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	CurrentVal : int;
 	Rank : int};
 	eltIn:int) 
 returns (
-	accu_out: {MinVal : int;
+	accu_out:tri::Exchange_accu {MinVal : int;
 	MinRank : int;
 	RankFrom : int;
 	CurrentVal : int;
@@ -11311,16 +12396,16 @@ tel
 -- end of node tri__Exchange_i_j
 
 node tri__UnarySort(
-	accu_in: {CurrentRank : int;
+	accu_in:tri::Sort_accu {CurrentRank : int;
 	Tab : int^10};
 	eltIn:int) 
 returns (
-	accu_out: {CurrentRank : int;
+	accu_out:tri::Sort_accu {CurrentRank : int;
 	Tab : int^10});
 var
-   accu_out_select: {RankToFind : int; CurrentRank : int; Val : int};
-   accu_out_min: {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
-   accu_out_exchange: {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
+   accu_out_select:tri::Select_accu {RankToFind : int; CurrentRank : int; Val : int};
+   accu_out_min:tri::MinFR_accu {MinVal : int; MinRank : int; RankFrom : int; Rank : int};
+   accu_out_exchange:tri::Exchange_accu {MinVal : int; MinRank : int; RankFrom : int; CurrentVal : int; Rank : int};
    localTab:int^10;
 let
     accu_out_min = red<<node tri__minFromRank, const
@@ -11337,7 +12422,7 @@ tel
 -- end of node tri__UnarySort
 node tri__main(TIn:int^10) returns (TSorted:int^10);
 var
-   UnarySort_accu_out: {CurrentRank : int; Tab : int^10};
+   UnarySort_accu_out:tri::Sort_accu {CurrentRank : int; Tab : int^10};
 let
     UnarySort_accu_out = red<<node tri__UnarySort, const
 	10>>(Sort_accu{CurrentRank=0;Tab=[7, 8, 4, 3, 2, 9, 1, 10, 2, 7]}, [7, 8,
@@ -11347,11 +12432,11 @@ tel
 -- end of node tri__main
 
 node tri__sorted_iter(
-	accu_in: {prev_elt : int;
+	accu_in:tri::sorted_iter_accu {prev_elt : int;
 	prop_is_tt : bool};
 	elt:int) 
 returns (
-	accu_out: {prev_elt : int;
+	accu_out:tri::sorted_iter_accu {prev_elt : int;
 	prop_is_tt : bool});
 let
     accu_out = sorted_iter_accu{prev_elt=elt;prop_is_tt=((accu_in.prev_elt <=
@@ -11360,7 +12445,7 @@ tel
 -- end of node tri__sorted_iter
 node tri__Sorted(TIn:int^10) returns (res:bool);
 var
-   accu_out: {prev_elt : int; prop_is_tt : bool};
+   accu_out:tri::sorted_iter_accu {prev_elt : int; prop_is_tt : bool};
    TSorted:int^10;
 let
    TSorted = tri__main(TIn);
@@ -11452,17 +12537,17 @@ tel
 	Exported types:
 	Exported constants:
 	Exported nodes:
-type inter__selType =  {i : int; b : bool; r : real};
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 
 node inter__preced(
-	in: {i : int;
+	in:inter::selType {i : int;
 	b : bool;
 	r : real}) 
 returns (
-	out: {i : int;
+	out:inter::selType {i : int;
 	b : bool;
 	r : real};
-	out2: {i : int;
+	out2:inter::selType {i : int;
 	b : bool;
 	r : real});
 let
@@ -11559,20 +12644,20 @@ tel
 -- end of node pint__fby1
  * package inter
 	Exported types:
-type inter__selType =  {i : int; b : bool; r : real};
+type inter__selType = inter::selType {i : int; b : bool; r : real};
 	Exported constants:
 const inter__n = -4;
 	Exported nodes:
 
 node inter__preced(
-	in: {i : int;
+	in:inter::selType {i : int;
 	b : bool;
 	r : real}) 
 returns (
-	out: {i : int;
+	out:inter::selType {i : int;
 	b : bool;
 	r : real};
-	out2: {i : int;
+	out2:inter::selType {i : int;
 	b : bool;
 	r : real});
 let
@@ -12133,12 +13218,12 @@ End of Syntax table dump. 
  * package def
 	Exported types:
 type def__int4 = int^4;
-type def__st =  {x : int^4};
+type def__st = def::st {x : int^4};
 	Exported constants:
 	Exported nodes:
-node def__def(a:bool) returns (b: {x : int^4});
+node def__def(a:bool) returns (b:def::st {x : int^4});
 var
-   c: {x : int^4};
+   c:def::st {x : int^4};
 let
    b.[0] = c.x[0];
    b.[1] = c.x[0];