diff --git a/src-derived/Code.hs b/src-derived/Code.hs
--- a/src-derived/Code.hs
+++ b/src-derived/Code.hs
@@ -207,12 +207,16 @@
          child comps          : {[String]}
       alternative UnboxedTupleLhs:
          child comps          : {[String]}
+      alternative Unwrap:
+         child name           : {String}
+         child sub            : Lhs 
 -}
 data Lhs  = Fun (String) (Exprs) 
           | Pattern3 (Pattern) 
           | Pattern3SM (Pattern) 
           | TupleLhs ([String]) 
           | UnboxedTupleLhs ([String]) 
+          | Unwrap (String) (Lhs) 
 -- Program -----------------------------------------------------
 {-
    alternatives:
diff --git a/src-derived/GenerateCode.hs b/src-derived/GenerateCode.hs
--- a/src-derived/GenerateCode.hs
+++ b/src-derived/GenerateCode.hs
@@ -53,6 +53,14 @@
   = maybe tp (\ctx -> CtxApp (map (\(n,ns) -> (getName n, ns)) ctx) tp) $ Map.lookup nt mp
 
 
+unwrapSem :: Bool -> NontermIdent -> Expr -> Expr
+unwrapSem False _ e = e
+unwrapSem True nm e = Case e alts
+  where alts  = [CaseAlt left right]
+        left  = Fun (typeName nm 0) [SimpleExpr "x"]
+        right = SimpleExpr "x"
+
+
 substSelf nt tp = case tp of
                     NT t tps | t == _SELF -> Haskell (getName nt ++ " " ++ unwords tps)
                     _                     -> tp
@@ -328,29 +336,29 @@
                           -- "GenerateCode.ag"(line 124, column 7)
                           _nontsOallNts =
                               _nontsIgathNts
-                          -- "GenerateCode.ag"(line 621, column 7)
+                          -- "GenerateCode.ag"(line 631, column 7)
                           _unfoldSemDom =
                               \nt nr repl ->
                                let (params, tp) = Map.findWithDefault (error ("No such semantic domain: " ++ show nt)) (nt, nr) _nontsIsemDomUnfoldGath
                                    replMap = Map.fromList (zip params repl)
                                    replace k = Map.findWithDefault ('@':k) k replMap
                                in evalType replace tp
-                          -- "GenerateCode.ag"(line 714, column 14)
+                          -- "GenerateCode.ag"(line 724, column 14)
                           _nontsOwith_sig =
                               typeSigs _lhsIoptions && _nontsIallTpsFound
-                          -- "GenerateCode.ag"(line 721, column 15)
+                          -- "GenerateCode.ag"(line 731, column 15)
                           _nontsOerrors =
                               Seq.empty
-                          -- "GenerateCode.ag"(line 785, column 17)
+                          -- "GenerateCode.ag"(line 795, column 17)
                           _lhsOoutput =
                               Program _nontsIchunks
-                          -- "GenerateCode.ag"(line 838, column 14)
+                          -- "GenerateCode.ag"(line 848, column 14)
                           _nontsOtypeSyns =
                               typeSyns_
-                          -- "GenerateCode.ag"(line 838, column 14)
+                          -- "GenerateCode.ag"(line 848, column 14)
                           _nontsOderivings =
                               derivings_
-                          -- "GenerateCode.ag"(line 838, column 14)
+                          -- "GenerateCode.ag"(line 848, column 14)
                           _nontsOwrappers =
                               wrappers_
                           -- copy rule (up)
@@ -480,19 +488,19 @@
                             _segIsemDom :: ([Decl])
                             _segIsemDomUnfoldGath :: (Map (NontermIdent, Int) ([String], Code.Type))
                             _segIwrapDecls :: Decls
-                            -- "GenerateCode.ag"(line 218, column 17)
+                            -- "GenerateCode.ag"(line 228, column 17)
                             _segOnr =
                                 0
-                            -- "GenerateCode.ag"(line 594, column 18)
+                            -- "GenerateCode.ag"(line 604, column 18)
                             _lhsOsemDom =
                                 Comment "semantic domain" : _segIsemDom
-                            -- use rule "GenerateCode.ag"(line 738, column 52)
+                            -- use rule "GenerateCode.ag"(line 748, column 52)
                             _lhsOcomments =
                                 _segIcomments
-                            -- use rule "GenerateCode.ag"(line 611, column 86)
+                            -- use rule "GenerateCode.ag"(line 621, column 86)
                             _lhsOsemDomUnfoldGath =
                                 _segIsemDomUnfoldGath
-                            -- use rule "GenerateCode.ag"(line 687, column 52)
+                            -- use rule "GenerateCode.ag"(line 697, column 52)
                             _lhsOwrapDecls =
                                 _segIwrapDecls
                             -- copy rule (down)
@@ -769,7 +777,7 @@
                               -- "GenerateCode.ag"(line 130, column 7)
                               _lhsOgathNts =
                                   Set.singleton nt_
-                              -- "GenerateCode.ag"(line 659, column 18)
+                              -- "GenerateCode.ag"(line 669, column 18)
                               _semWrapper =
                                   let params' = map getName params_
                                       inhAttrs = Map.toList inh_
@@ -797,10 +805,10 @@
                                                     (Let _interIwrapDecls (App synNT synVars))
                                                     Set.empty Set.empty
                                               ]
-                              -- "GenerateCode.ag"(line 734, column 18)
+                              -- "GenerateCode.ag"(line 744, column 18)
                               _comment =
                                   Comment . unlines . map ind $ ( _interIcomments ++ ("alternatives:" : map ind _prodsIcomments) )
-                              -- "GenerateCode.ag"(line 788, column 19)
+                              -- "GenerateCode.ag"(line 798, column 19)
                               _lhsOchunks =
                                   [ Chunk (getName nt_)
                                          (Comment (getName nt_ ++ " " ++ replicate (60 - length (getName nt_)) '-'))
@@ -812,7 +820,7 @@
                                          (if _lhsIo_sem                     then  _prodsIdecls     else [])
                                          (if _lhsIo_sem                     then  _prodsIsemNames  else [])
                                   ]
-                              -- "GenerateCode.ag"(line 843, column 18)
+                              -- "GenerateCode.ag"(line 853, column 18)
                               _dataDef =
                                   let params' = map getName params_
                                       typeSyn tp = let theType =
@@ -831,7 +839,7 @@
                                       derivings  = maybe [] (map getName . Set.toList) (Map.lookup nt_ _lhsIderivings)
                                       dataDef    = Data (getName nt_) (map getName params_) _prodsIdataAlts (maybe False id _lhsIo_data) derivings
                                   in maybe dataDef typeSyn $ lookup nt_ _lhsItypeSyns
-                              -- "GenerateCode.ag"(line 877, column 18)
+                              -- "GenerateCode.ag"(line 887, column 18)
                               _cataFun =
                                   let appParams nm = TypeApp (SimpleType nm) (map SimpleType (map getName params_))
                                       evalTp | null params_ = id
@@ -914,13 +922,13 @@
                                   in  Comment "cata" :
                                       (if _lhsIo_sig then [tSig] else []) ++
                                       maybe _prodsIcataAlts special (lookup nt_ _lhsItypeSyns)
-                              -- use rule "GenerateCode.ag"(line 706, column 39)
+                              -- use rule "GenerateCode.ag"(line 716, column 39)
                               _lhsOallTpsFound =
                                   _prodsIallTpsFound
-                              -- use rule "GenerateCode.ag"(line 719, column 32)
+                              -- use rule "GenerateCode.ag"(line 729, column 32)
                               _lhsOerrors =
                                   _prodsIerrors
-                              -- use rule "GenerateCode.ag"(line 611, column 86)
+                              -- use rule "GenerateCode.ag"(line 621, column 86)
                               _lhsOsemDomUnfoldGath =
                                   _interIsemDomUnfoldGath
                               -- copy rule (down)
@@ -1218,19 +1226,19 @@
                                _tlIerrors :: (Seq Error)
                                _tlIgathNts :: (Set NontermIdent)
                                _tlIsemDomUnfoldGath :: (Map (NontermIdent, Int) ([String], Code.Type))
-                               -- use rule "GenerateCode.ag"(line 706, column 39)
+                               -- use rule "GenerateCode.ag"(line 716, column 39)
                                _lhsOallTpsFound =
                                    _hdIallTpsFound && _tlIallTpsFound
-                               -- use rule "GenerateCode.ag"(line 780, column 49)
+                               -- use rule "GenerateCode.ag"(line 790, column 49)
                                _lhsOchunks =
                                    _hdIchunks ++ _tlIchunks
-                               -- use rule "GenerateCode.ag"(line 719, column 32)
+                               -- use rule "GenerateCode.ag"(line 729, column 32)
                                _lhsOerrors =
                                    _hdIerrors Seq.>< _tlIerrors
                                -- use rule "GenerateCode.ag"(line 126, column 47)
                                _lhsOgathNts =
                                    _hdIgathNts `Set.union` _tlIgathNts
-                               -- use rule "GenerateCode.ag"(line 611, column 86)
+                               -- use rule "GenerateCode.ag"(line 621, column 86)
                                _lhsOsemDomUnfoldGath =
                                    _hdIsemDomUnfoldGath `Map.union` _tlIsemDomUnfoldGath
                                -- copy rule (down)
@@ -1420,19 +1428,19 @@
                                _lhsOerrors :: (Seq Error)
                                _lhsOgathNts :: (Set NontermIdent)
                                _lhsOsemDomUnfoldGath :: (Map (NontermIdent, Int) ([String], Code.Type))
-                               -- use rule "GenerateCode.ag"(line 706, column 39)
+                               -- use rule "GenerateCode.ag"(line 716, column 39)
                                _lhsOallTpsFound =
                                    True
-                               -- use rule "GenerateCode.ag"(line 780, column 49)
+                               -- use rule "GenerateCode.ag"(line 790, column 49)
                                _lhsOchunks =
                                    []
-                               -- use rule "GenerateCode.ag"(line 719, column 32)
+                               -- use rule "GenerateCode.ag"(line 729, column 32)
                                _lhsOerrors =
                                    Seq.empty
                                -- use rule "GenerateCode.ag"(line 126, column 47)
                                _lhsOgathNts =
                                    Set.empty
-                               -- use rule "GenerateCode.ag"(line 611, column 86)
+                               -- use rule "GenerateCode.ag"(line 621, column 86)
                                _lhsOsemDomUnfoldGath =
                                    Map.empty
                            in  ( _lhsOallTpsFound,_lhsOchunks,_lhsOerrors,_lhsOgathNts,_lhsOsemDomUnfoldGath))) )
@@ -1612,31 +1620,31 @@
                              -- "GenerateCode.ag"(line 98, column 7)
                              _paramInstMap =
                                  Map.fromList [(nm, (extractNonterminal tp, tps)) | (nm,tp,_) <- children_, let tps = map cleanupArg $ nontermArgs tp, not (null tps) ]
-                             -- "GenerateCode.ag"(line 214, column 18)
+                             -- "GenerateCode.ag"(line 224, column 18)
                              _visitsOnr =
                                  0
-                             -- "GenerateCode.ag"(line 340, column 18)
+                             -- "GenerateCode.ag"(line 350, column 18)
                              _visitsOchildren =
                                  children_
-                             -- "GenerateCode.ag"(line 450, column 7)
+                             -- "GenerateCode.ag"(line 460, column 7)
                              _visitsOinstVisitNrs =
                                  _visitsIgatherInstVisitNrs
-                             -- "GenerateCode.ag"(line 749, column 17)
+                             -- "GenerateCode.ag"(line 759, column 17)
                              _firstOrderChildren =
                                  filter (\(_,_,ho) -> not ho) children_
-                             -- "GenerateCode.ag"(line 750, column 18)
+                             -- "GenerateCode.ag"(line 760, column 18)
                              _lhsOcomments =
                                  ("alternative " ++ getName con_ ++ ":")
                                  : map ind (  map (\(x,y,_) -> makeLocalComment 14 "child" x (Just y)) _firstOrderChildren
                                            ++ _visitsIcomments
                                            )
-                             -- "GenerateCode.ag"(line 869, column 17)
+                             -- "GenerateCode.ag"(line 879, column 17)
                              _params =
                                  map getName $ Map.findWithDefault [] _lhsInt _lhsIparamMap
-                             -- "GenerateCode.ag"(line 870, column 17)
+                             -- "GenerateCode.ag"(line 880, column 17)
                              _lhsOdataAlt =
                                  DataAlt (conname _lhsIo_rename _lhsInt con_) (map (\(_,t,_) -> typeToHaskellString (Just _lhsInt) _params     t) _firstOrderChildren    )
-                             -- "GenerateCode.ag"(line 969, column 17)
+                             -- "GenerateCode.ag"(line 979, column 17)
                              _lhsOcataAlt =
                                  let lhs = Fun (cataname _lhsIprefix _lhsInt) [lhs_pat]
                                      lhs_pat = App (conname _lhsIo_rename _lhsInt con_)
@@ -1648,16 +1656,16 @@
                                                                       [SimpleExpr (locname nm)]
                                      argument (nm, _,_)    = SimpleExpr (locname nm)
                                   in Decl lhs rhs Set.empty Set.empty
-                             -- use rule "GenerateCode.ag"(line 706, column 39)
+                             -- use rule "GenerateCode.ag"(line 716, column 39)
                              _lhsOallTpsFound =
                                  _visitsIallTpsFound
-                             -- use rule "GenerateCode.ag"(line 781, column 44)
+                             -- use rule "GenerateCode.ag"(line 791, column 44)
                              _lhsOdecls =
                                  _visitsIdecls
-                             -- use rule "GenerateCode.ag"(line 719, column 32)
+                             -- use rule "GenerateCode.ag"(line 729, column 32)
                              _lhsOerrors =
                                  _visitsIerrors
-                             -- use rule "GenerateCode.ag"(line 985, column 61)
+                             -- use rule "GenerateCode.ag"(line 995, column 61)
                              _lhsOsemNames =
                                  _visitsIsemNames
                              -- copy rule (down)
@@ -1925,25 +1933,25 @@
                               _tlIdecls :: Decls
                               _tlIerrors :: (Seq Error)
                               _tlIsemNames :: ([String])
-                              -- "GenerateCode.ag"(line 865, column 17)
+                              -- "GenerateCode.ag"(line 875, column 17)
                               _lhsOdataAlts =
                                   _hdIdataAlt : _tlIdataAlts
-                              -- "GenerateCode.ag"(line 965, column 10)
+                              -- "GenerateCode.ag"(line 975, column 10)
                               _lhsOcataAlts =
                                   _hdIcataAlt : _tlIcataAlts
-                              -- use rule "GenerateCode.ag"(line 706, column 39)
+                              -- use rule "GenerateCode.ag"(line 716, column 39)
                               _lhsOallTpsFound =
                                   _hdIallTpsFound && _tlIallTpsFound
-                              -- use rule "GenerateCode.ag"(line 738, column 52)
+                              -- use rule "GenerateCode.ag"(line 748, column 52)
                               _lhsOcomments =
                                   _hdIcomments ++ _tlIcomments
-                              -- use rule "GenerateCode.ag"(line 781, column 44)
+                              -- use rule "GenerateCode.ag"(line 791, column 44)
                               _lhsOdecls =
                                   _hdIdecls ++ _tlIdecls
-                              -- use rule "GenerateCode.ag"(line 719, column 32)
+                              -- use rule "GenerateCode.ag"(line 729, column 32)
                               _lhsOerrors =
                                   _hdIerrors Seq.>< _tlIerrors
-                              -- use rule "GenerateCode.ag"(line 985, column 61)
+                              -- use rule "GenerateCode.ag"(line 995, column 61)
                               _lhsOsemNames =
                                   _hdIsemNames ++ _tlIsemNames
                               -- copy rule (down)
@@ -2135,25 +2143,25 @@
                               _lhsOdecls :: Decls
                               _lhsOerrors :: (Seq Error)
                               _lhsOsemNames :: ([String])
-                              -- "GenerateCode.ag"(line 866, column 17)
+                              -- "GenerateCode.ag"(line 876, column 17)
                               _lhsOdataAlts =
                                   []
-                              -- "GenerateCode.ag"(line 966, column 10)
+                              -- "GenerateCode.ag"(line 976, column 10)
                               _lhsOcataAlts =
                                   []
-                              -- use rule "GenerateCode.ag"(line 706, column 39)
+                              -- use rule "GenerateCode.ag"(line 716, column 39)
                               _lhsOallTpsFound =
                                   True
-                              -- use rule "GenerateCode.ag"(line 738, column 52)
+                              -- use rule "GenerateCode.ag"(line 748, column 52)
                               _lhsOcomments =
                                   []
-                              -- use rule "GenerateCode.ag"(line 781, column 44)
+                              -- use rule "GenerateCode.ag"(line 791, column 44)
                               _lhsOdecls =
                                   []
-                              -- use rule "GenerateCode.ag"(line 719, column 32)
+                              -- use rule "GenerateCode.ag"(line 729, column 32)
                               _lhsOerrors =
                                   Seq.empty
-                              -- use rule "GenerateCode.ag"(line 985, column 61)
+                              -- use rule "GenerateCode.ag"(line 995, column 61)
                               _lhsOsemNames =
                                   []
                           in  ( _lhsOallTpsFound,_lhsOcataAlts,_lhsOcomments,_lhsOdataAlts,_lhsOdecls,_lhsOerrors,_lhsOsemNames))) )
@@ -2357,15 +2365,15 @@
                        _lhsOdecls :: Decls
                        _lhsOdefinedInsts :: ([Identifier])
                        _lhsOerrors :: (Seq Error)
-                       -- "GenerateCode.ag"(line 181, column 18)
+                       -- "GenerateCode.ag"(line 182, column 18)
                        _costCentreDescr =
                            show _lhsInt ++ ":" ++ show _lhsIcon ++ ":" ++ show name_ ++ ":" ++ show nt_ ++ ":" ++ show nr_
-                       -- "GenerateCode.ag"(line 182, column 18)
+                       -- "GenerateCode.ag"(line 183, column 18)
                        _addCostCentre =
                            \v -> if _lhsIo_costcentre
                                  then PragmaExpr True False ("SCC \"" ++ _costCentreDescr     ++ "\"") v
                                  else v
-                       -- "GenerateCode.ag"(line 185, column 18)
+                       -- "GenerateCode.ag"(line 186, column 18)
                        _decls =
                            let  lhsVars =  map (attrname True name_) (Map.keys syn_)
                                            ++ if isLast_ then [] else [unwrap ++ funname name_ (nr_+1)]
@@ -2374,74 +2382,74 @@
                                 tuple = mkTupleLhs _lhsIo_unbox (null $ Map.keys inh_) lhsVars
                                 rhs = _addCostCentre     $ App (funname name_ nr_) (map SimpleExpr rhsVars)
                            in [Decl tuple rhs (Set.fromList lhsVars) (Set.fromList (funname name_ nr_ : rhsVars))]
-                       -- "GenerateCode.ag"(line 261, column 7)
+                       -- "GenerateCode.ag"(line 271, column 7)
                        _isSuperfluousHigherOrderIntra =
                            _lhsInr <= Map.findWithDefault (-1) name_ _lhsIinstVisitNrs
-                       -- "GenerateCode.ag"(line 275, column 8)
+                       -- "GenerateCode.ag"(line 285, column 8)
                        _names =
                            if _isSuperfluousHigherOrderIntra
                            then []
                            else [funname name_ (nr_+1)]
-                       -- "GenerateCode.ag"(line 279, column 8)
+                       -- "GenerateCode.ag"(line 289, column 8)
                        _lhsOexprs =
                            let wrap = if _lhsIo_newtypes then \x -> App (typeName nt_ (nr_ + 1)) [x] else id
                                addType expr | null _instParams     = expr
                                             | otherwise            = TypedExpr expr (_lhsIunfoldSemDom nt_ (nr_+1) _instParams    )
                            in map (wrap . addType . SimpleExpr) _names
-                       -- "GenerateCode.ag"(line 291, column 7)
+                       -- "GenerateCode.ag"(line 301, column 7)
                        _lhsOusedVars =
                            Set.fromList _names
-                       -- "GenerateCode.ag"(line 315, column 19)
+                       -- "GenerateCode.ag"(line 325, column 19)
                        _mkTp =
                            _evalTp     . SimpleType . typeToHaskellString (Just nt_) _orgParams
-                       -- "GenerateCode.ag"(line 316, column 19)
+                       -- "GenerateCode.ag"(line 326, column 19)
                        _definedTps =
                            [ TSig (attrname True name_ a) (_mkTp tp) |  (a,tp) <- Map.toList syn_ ]
-                       -- "GenerateCode.ag"(line 317, column 19)
+                       -- "GenerateCode.ag"(line 327, column 19)
                        _nextTp =
                            typeName nt_ (nr_+1)
-                       -- "GenerateCode.ag"(line 318, column 19)
+                       -- "GenerateCode.ag"(line 328, column 19)
                        _lhsOtSigs =
                            (if isLast_ then id else (TSig (funname name_ (nr_+1)) (TypeApp (SimpleType _nextTp) (map SimpleType _instParams    )) :)) _definedTps
-                       -- "GenerateCode.ag"(line 320, column 19)
+                       -- "GenerateCode.ag"(line 330, column 19)
                        _orgParams =
                            map getName $ Map.findWithDefault [] nt_ _lhsIparamMap
-                       -- "GenerateCode.ag"(line 321, column 19)
+                       -- "GenerateCode.ag"(line 331, column 19)
                        _instParams =
                            snd $ Map.findWithDefault (nt_,[]) name_ _lhsIparamInstMap
-                       -- "GenerateCode.ag"(line 322, column 19)
+                       -- "GenerateCode.ag"(line 332, column 19)
                        _replParamMap =
                            Map.fromList (zip _orgParams     _instParams    )
-                       -- "GenerateCode.ag"(line 323, column 19)
+                       -- "GenerateCode.ag"(line 333, column 19)
                        _replace =
                            \k -> Map.findWithDefault k k _replParamMap
-                       -- "GenerateCode.ag"(line 324, column 19)
+                       -- "GenerateCode.ag"(line 334, column 19)
                        _evalTp =
                            if null _orgParams     then id else evalType _replace
-                       -- "GenerateCode.ag"(line 347, column 19)
+                       -- "GenerateCode.ag"(line 357, column 19)
                        _lhsOtps =
                            if _isSuperfluousHigherOrderIntra
                            then []
                            else [NT (ntOfVisit nt_ (nr_+1)) _instParams    ]
-                       -- "GenerateCode.ag"(line 472, column 7)
+                       -- "GenerateCode.ag"(line 482, column 7)
                        _lhsOdeclsAbove =
                            []
-                       -- "GenerateCode.ag"(line 485, column 7)
+                       -- "GenerateCode.ag"(line 495, column 7)
                        _lhsObldBlocksFun =
                            DeclBlock _lhsIdeclsAbove (head _decls    )
-                       -- use rule "GenerateCode.ag"(line 344, column 39)
+                       -- use rule "GenerateCode.ag"(line 354, column 39)
                        _lhsOallTpsFound =
                            True
-                       -- use rule "GenerateCode.ag"(line 738, column 52)
+                       -- use rule "GenerateCode.ag"(line 748, column 52)
                        _lhsOcomments =
                            []
                        -- use rule "GenerateCode.ag"(line 138, column 34)
                        _lhsOdecls =
                            _decls
-                       -- use rule "GenerateCode.ag"(line 195, column 55)
+                       -- use rule "GenerateCode.ag"(line 205, column 55)
                        _lhsOdefinedInsts =
                            []
-                       -- use rule "GenerateCode.ag"(line 719, column 32)
+                       -- use rule "GenerateCode.ag"(line 729, column 32)
                        _lhsOerrors =
                            Seq.empty
                    in  ( _lhsOallTpsFound,_lhsObldBlocksFun,_lhsOcomments,_lhsOdecls,_lhsOdeclsAbove,_lhsOdefinedInsts,_lhsOerrors,_lhsOexprs,_lhsOtSigs,_lhsOtps,_lhsOusedVars))) )
@@ -2519,7 +2527,8 @@
                        _instDecls =
                            [ Decl (Pattern3 (Alias _INST' inst (Underscore (getPos inst)) []))
                                   ( let nm = fromJust $ inst `lookup` _instTypes
-                                    in case nm `Set.member` _lhsIallNts of
+                                    in unwrapSem _lhsIo_newtypes (maybe nm id (deforestedNt nm))
+                                       $ case nm `Set.member` _lhsIallNts of
                                          True  -> App (cataname _lhsIprefix nm)
                                                       [SimpleExpr instLocFieldName]
                                          False -> SimpleExpr instLocFieldName
@@ -2529,28 +2538,28 @@
                            | inst <- _definedInsts
                            , let instLocFieldName = attrname True _INST inst
                            , let instSemFieldName = attrname False _INST' inst ]
-                       -- "GenerateCode.ag"(line 156, column 12)
+                       -- "GenerateCode.ag"(line 157, column 12)
                        _patDescr =
                            if isIn_
                            then "_"
                            else concat $ intersperse "," (map (\(f,a) -> show f ++ "." ++ show a) _patternIpatternAttributes)
-                       -- "GenerateCode.ag"(line 159, column 12)
+                       -- "GenerateCode.ag"(line 160, column 12)
                        _traceDescr =
                            show nt_ ++ " :: " ++ show con_ ++ " :: " ++ _patDescr
-                       -- "GenerateCode.ag"(line 161, column 12)
+                       -- "GenerateCode.ag"(line 162, column 12)
                        _addTrace =
                            \v -> if _lhsIo_traces
                                  then Trace _traceDescr     v
                                  else v
-                       -- "GenerateCode.ag"(line 164, column 12)
+                       -- "GenerateCode.ag"(line 165, column 12)
                        _costCentreDescr =
                            show nt_ ++ ":" ++ show con_ ++ ":" ++ _patDescr
-                       -- "GenerateCode.ag"(line 165, column 12)
+                       -- "GenerateCode.ag"(line 166, column 12)
                        _addCostCentre =
                            \v -> if _lhsIo_costcentre
                                  then PragmaExpr True False ("SCC \"" ++ _costCentreDescr     ++ "\"") v
                                  else v
-                       -- "GenerateCode.ag"(line 168, column 12)
+                       -- "GenerateCode.ag"(line 169, column 12)
                        _addLinePragma =
                            \v -> let p = getPos name_
                                      hasPos = line p > 0 && column p >= 0 && not (null (file p))
@@ -2559,7 +2568,7 @@
                                          $ LineExpr
                                          $ v
                                     else v
-                       -- "GenerateCode.ag"(line 175, column 12)
+                       -- "GenerateCode.ag"(line 176, column 12)
                        _decls =
                            if hasCode_
                            then _originComment ( Decl (Pattern3 _patternIcopy) (_addTrace     $ _addCostCentre     $ _addLinePragma     $ (TextExpr rhs_))
@@ -2567,31 +2576,31 @@
                                                       (Set.fromList [attrname True fld nm | (fld,nm) <- Set.toList uses_])
                                                : _instDecls    )
                            else _instDecls
-                       -- "GenerateCode.ag"(line 200, column 12)
+                       -- "GenerateCode.ag"(line 210, column 12)
                        _definedInsts =
                            if isIn_ then [] else _patternIdefinedInsts
-                       -- "GenerateCode.ag"(line 270, column 12)
+                       -- "GenerateCode.ag"(line 280, column 12)
                        _rulename =
                            if  field_ == _LOC && name_ `elem` _lhsIterminals
                            then funname name_ 0
                            else attrname isIn_ field_ name_
-                       -- "GenerateCode.ag"(line 273, column 12)
+                       -- "GenerateCode.ag"(line 283, column 12)
                        _lhsOexprs =
                            [SimpleExpr _rulename    ]
-                       -- "GenerateCode.ag"(line 289, column 7)
+                       -- "GenerateCode.ag"(line 299, column 7)
                        _lhsOusedVars =
                            Set.singleton _rulename
-                       -- "GenerateCode.ag"(line 299, column 19)
+                       -- "GenerateCode.ag"(line 309, column 19)
                        _mkTp =
                            SimpleType . typeToHaskellString (Just _lhsInt) _orgParams
-                       -- "GenerateCode.ag"(line 300, column 19)
+                       -- "GenerateCode.ag"(line 310, column 19)
                        _lhsOtSigs =
                            [ TSig (attrname False field attr) (_evalTp     field $ _mkTp (fromJust tp))
                            |  (field,attr,tp) <- Map.elems defines_, isJust tp ]
-                       -- "GenerateCode.ag"(line 303, column 19)
+                       -- "GenerateCode.ag"(line 313, column 19)
                        _orgParams =
                            map getName $ Map.findWithDefault [] _lhsInt _lhsIparamMap
-                       -- "GenerateCode.ag"(line 304, column 19)
+                       -- "GenerateCode.ag"(line 314, column 19)
                        _evalTp =
                            \field tp -> let orgFldParams = map getName $ Map.findWithDefault [] childNt _lhsIparamMap
                                             (childNt,instParams) = Map.findWithDefault (_lhsInt,[]) field _lhsIparamInstMap
@@ -2602,34 +2611,34 @@
                                                 then tp
                                                 else idEvalType tp
                                            else evalType replace tp
-                       -- "GenerateCode.ag"(line 346, column 23)
+                       -- "GenerateCode.ag"(line 356, column 23)
                        __tup3 =
                            maybe ([],False) (\tp -> ([substSelf (fromJust childnt_) tp],True)) tp_
-                       -- "GenerateCode.ag"(line 346, column 23)
+                       -- "GenerateCode.ag"(line 356, column 23)
                        (_lhsOtps,_) =
                            __tup3
-                       -- "GenerateCode.ag"(line 346, column 23)
+                       -- "GenerateCode.ag"(line 356, column 23)
                        (_,_lhsOallTpsFound) =
                            __tup3
-                       -- "GenerateCode.ag"(line 470, column 7)
+                       -- "GenerateCode.ag"(line 480, column 7)
                        _lhsOdeclsAbove =
                            _lhsIdeclsAbove ++ _decls
-                       -- "GenerateCode.ag"(line 483, column 7)
+                       -- "GenerateCode.ag"(line 493, column 7)
                        _lhsObldBlocksFun =
                            id
-                       -- "GenerateCode.ag"(line 725, column 12)
+                       -- "GenerateCode.ag"(line 735, column 12)
                        _lhsOerrors =
                            let nameOf (Alias _ _ _ pats@(_:_)) = Ident (show (map (\(Alias _ a _ _)->a) pats)) (getPos name_)
                                nameOf _ = name_
                            in  maybe (Seq.singleton (MissingTypeSig _lhsInt _lhsIcon (nameOf _patternIcopy))) (const Seq.empty) tp_
-                       -- "GenerateCode.ag"(line 765, column 18)
+                       -- "GenerateCode.ag"(line 775, column 18)
                        _lhsOcomments =
                            [ makeLocalComment 11 _lhsIwhat name tp | (field,name,tp) <- Map.elems defines_, field == _LOC ]
                            ++ [ makeLocalComment 11 "inst " name tp | (field,name,tp) <- Map.elems defines_, field == _INST ]
                        -- use rule "GenerateCode.ag"(line 138, column 34)
                        _lhsOdecls =
                            _decls
-                       -- use rule "GenerateCode.ag"(line 195, column 55)
+                       -- use rule "GenerateCode.ag"(line 205, column 55)
                        _lhsOdefinedInsts =
                            _definedInsts
                        ( _patternIcopy,_patternIdefinedInsts,_patternIpatternAttributes) =
@@ -2742,24 +2751,24 @@
                           _lhsOsemDomUnfoldGath :: (Map (NontermIdent, Int) ([String], Code.Type))
                           _lhsOwrapDecls :: Decls
                           _lhsOcomments :: ([String])
-                          -- "GenerateCode.ag"(line 597, column 15)
+                          -- "GenerateCode.ag"(line 607, column 15)
                           _tp =
                               foldr Arr _synTps     _inhTps
-                          -- "GenerateCode.ag"(line 598, column 15)
+                          -- "GenerateCode.ag"(line 608, column 15)
                           _inhTps =
                               [SimpleType (typeToHaskellString (Just _lhsInt) _params     tp) |  tp <- Map.elems inh_]
-                          -- "GenerateCode.ag"(line 599, column 15)
+                          -- "GenerateCode.ag"(line 609, column 15)
                           _synTps =
                               mkTupleType _lhsIo_unbox (null _inhTps    ) ([SimpleType (typeToHaskellString (Just _lhsInt) _params     tp) |  tp <- Map.elems syn_] ++ _continuation    )
-                          -- "GenerateCode.ag"(line 600, column 15)
+                          -- "GenerateCode.ag"(line 610, column 15)
                           _continuation =
                               if  _lhsIisLast
                               then []
                               else [TypeApp (SimpleType (typeName _lhsInt (_lhsInr + 1))) (map (SimpleType . ('@':)) _params    )]
-                          -- "GenerateCode.ag"(line 603, column 15)
+                          -- "GenerateCode.ag"(line 613, column 15)
                           _params =
                               map getName $ Map.findWithDefault [] _lhsInt _lhsIparamMap
-                          -- "GenerateCode.ag"(line 604, column 15)
+                          -- "GenerateCode.ag"(line 614, column 15)
                           _lhsOsemDom =
                               let name = typeName _lhsInt _lhsInr
                                   evalTp | null _params     = id
@@ -2767,10 +2776,10 @@
                               in if _lhsIo_newtypes
                                  then [ Code.NewType name _params     name (evalTp _tp    ) ]
                                  else [ Code.Type name _params     (evalTp _tp    ) ]
-                          -- "GenerateCode.ag"(line 615, column 7)
+                          -- "GenerateCode.ag"(line 625, column 7)
                           _lhsOsemDomUnfoldGath =
                               Map.singleton (_lhsInt, _lhsInr) (_params    , _tp    )
-                          -- "GenerateCode.ag"(line 689, column 15)
+                          -- "GenerateCode.ag"(line 699, column 15)
                           _lhsOwrapDecls =
                               let lhsVars = map (lhsname False) (Map.keys syn_)
                                             ++ if _lhsIisLast then [] else [unwrap ++ sem (_lhsInr+1)]
@@ -2781,7 +2790,7 @@
                                   sem 0 = var
                                   sem n = var ++ "_" ++ show n
                               in [ Decl (mkTupleLhs _lhsIo_unbox (null $ Map.keys inh_) lhsVars) (App (sem _lhsInr) rhs) (Set.fromList lhsVars) (Set.fromList rhsVars) ]
-                          -- "GenerateCode.ag"(line 743, column 18)
+                          -- "GenerateCode.ag"(line 753, column 18)
                           _lhsOcomments =
                               let body = map ind (showsSegment (CSegment inh_ syn_))
                               in if null body
@@ -2939,25 +2948,25 @@
                            _tlIsemDom :: ([Decl])
                            _tlIsemDomUnfoldGath :: (Map (NontermIdent, Int) ([String], Code.Type))
                            _tlIwrapDecls :: Decls
-                           -- "GenerateCode.ag"(line 220, column 11)
+                           -- "GenerateCode.ag"(line 230, column 11)
                            _tlOnr =
                                _lhsInr + 1
-                           -- "GenerateCode.ag"(line 233, column 12)
+                           -- "GenerateCode.ag"(line 243, column 12)
                            _lhsOisNil =
                                False
-                           -- "GenerateCode.ag"(line 234, column 12)
+                           -- "GenerateCode.ag"(line 244, column 12)
                            _hdOisLast =
                                _tlIisNil
-                           -- use rule "GenerateCode.ag"(line 738, column 52)
+                           -- use rule "GenerateCode.ag"(line 748, column 52)
                            _lhsOcomments =
                                _hdIcomments ++ _tlIcomments
-                           -- use rule "GenerateCode.ag"(line 592, column 50)
+                           -- use rule "GenerateCode.ag"(line 602, column 50)
                            _lhsOsemDom =
                                _hdIsemDom ++ _tlIsemDom
-                           -- use rule "GenerateCode.ag"(line 611, column 86)
+                           -- use rule "GenerateCode.ag"(line 621, column 86)
                            _lhsOsemDomUnfoldGath =
                                _hdIsemDomUnfoldGath `Map.union` _tlIsemDomUnfoldGath
-                           -- use rule "GenerateCode.ag"(line 687, column 52)
+                           -- use rule "GenerateCode.ag"(line 697, column 52)
                            _lhsOwrapDecls =
                                _hdIwrapDecls ++ _tlIwrapDecls
                            -- copy rule (down)
@@ -3109,19 +3118,19 @@
                            _lhsOsemDom :: ([Decl])
                            _lhsOsemDomUnfoldGath :: (Map (NontermIdent, Int) ([String], Code.Type))
                            _lhsOwrapDecls :: Decls
-                           -- "GenerateCode.ag"(line 235, column 10)
+                           -- "GenerateCode.ag"(line 245, column 10)
                            _lhsOisNil =
                                True
-                           -- use rule "GenerateCode.ag"(line 738, column 52)
+                           -- use rule "GenerateCode.ag"(line 748, column 52)
                            _lhsOcomments =
                                []
-                           -- use rule "GenerateCode.ag"(line 592, column 50)
+                           -- use rule "GenerateCode.ag"(line 602, column 50)
                            _lhsOsemDom =
                                []
-                           -- use rule "GenerateCode.ag"(line 611, column 86)
+                           -- use rule "GenerateCode.ag"(line 621, column 86)
                            _lhsOsemDomUnfoldGath =
                                Map.empty
-                           -- use rule "GenerateCode.ag"(line 687, column 52)
+                           -- use rule "GenerateCode.ag"(line 697, column 52)
                            _lhsOwrapDecls =
                                []
                        in  ( _lhsOcomments,_lhsOisNil,_lhsOsemDom,_lhsOsemDomUnfoldGath,_lhsOwrapDecls))) )
@@ -3386,28 +3395,28 @@
                         _intraItSigs :: ([Decl])
                         _intraItps :: ([Type])
                         _intraIusedVars :: (Set String)
-                        -- "GenerateCode.ag"(line 244, column 13)
+                        -- "GenerateCode.ag"(line 254, column 13)
                         _lhsOintra =
                             _intraIexprs
-                        -- "GenerateCode.ag"(line 245, column 13)
+                        -- "GenerateCode.ag"(line 255, column 13)
                         _lhsOintraVars =
                             _intraIusedVars
-                        -- "GenerateCode.ag"(line 357, column 13)
+                        -- "GenerateCode.ag"(line 367, column 13)
                         __tup4 =
                             partition (\(_,_,ho) -> ho) _lhsIchildren
-                        -- "GenerateCode.ag"(line 357, column 13)
+                        -- "GenerateCode.ag"(line 367, column 13)
                         (_higherOrderChildren,_) =
                             __tup4
-                        -- "GenerateCode.ag"(line 357, column 13)
+                        -- "GenerateCode.ag"(line 367, column 13)
                         (_,_firstOrderChildren) =
                             __tup4
-                        -- "GenerateCode.ag"(line 358, column 13)
+                        -- "GenerateCode.ag"(line 368, column 13)
                         _funcname =
                             seqSemname _lhsIprefix _lhsInt _lhsIcon _lhsInr
-                        -- "GenerateCode.ag"(line 359, column 13)
+                        -- "GenerateCode.ag"(line 369, column 13)
                         _nextVisitName =
                             if _lhsIisLast then [] else [visitname _lhsIprefix _lhsInt (_lhsInr+1)]
-                        -- "GenerateCode.ag"(line 360, column 13)
+                        -- "GenerateCode.ag"(line 370, column 13)
                         _nextVisitDecl =
                             let  lhs = TupleLhs _nextVisitName
                                  rhs = App fun _lhsInextIntra
@@ -3415,39 +3424,39 @@
                             in if _lhsIisLast
                                then []
                                else [Decl lhs rhs (Set.fromList _nextVisitName) _lhsInextIntraVars]
-                        -- "GenerateCode.ag"(line 366, column 13)
+                        -- "GenerateCode.ag"(line 376, column 13)
                         _decls =
                             _typeSigs ++ _vssIdecls ++ _nextVisitDecl
-                        -- "GenerateCode.ag"(line 367, column 13)
+                        -- "GenerateCode.ag"(line 377, column 13)
                         _vssOlastExpr =
                             mkTupleExpr _lhsIo_unbox (null $ Map.keys inh_) $ map (SimpleExpr . lhsname False) (Map.keys syn_) ++ map SimpleExpr _nextVisitName
-                        -- "GenerateCode.ag"(line 368, column 13)
+                        -- "GenerateCode.ag"(line 378, column 13)
                         _intraOlastExpr =
                             error "lastExpr: not used here"
-                        -- "GenerateCode.ag"(line 369, column 13)
+                        -- "GenerateCode.ag"(line 379, column 13)
                         _lastExprVars =
                             map (lhsname False) (Map.keys syn_) ++ _nextVisitName
-                        -- "GenerateCode.ag"(line 370, column 13)
+                        -- "GenerateCode.ag"(line 380, column 13)
                         __tup5 =
                             mkPartitionedFunction _funcname     _o_case     _nextVisitDecl     _lastExprVars     _vssIblockDecls
-                        -- "GenerateCode.ag"(line 370, column 13)
+                        -- "GenerateCode.ag"(line 380, column 13)
                         (_blockFunDecls,_) =
                             __tup5
-                        -- "GenerateCode.ag"(line 370, column 13)
+                        -- "GenerateCode.ag"(line 380, column 13)
                         (_,_blockFirstFunCall) =
                             __tup5
-                        -- "GenerateCode.ag"(line 372, column 13)
+                        -- "GenerateCode.ag"(line 382, column 13)
                         _costCentreDescr =
                             "b" ++ ":" ++ show _lhsInt ++ ":" ++ show _lhsIcon ++ ":" ++ show _lhsInr
-                        -- "GenerateCode.ag"(line 373, column 13)
+                        -- "GenerateCode.ag"(line 383, column 13)
                         _addCostCentre =
                             \v -> if _lhsIo_costcentre
                                   then PragmaExpr True False ("SCC \"" ++ _costCentreDescr     ++ "\"") v
                                   else v
-                        -- "GenerateCode.ag"(line 377, column 13)
+                        -- "GenerateCode.ag"(line 387, column 13)
                         _params =
                             map getName $ Map.findWithDefault [] _lhsInt _lhsIparamMap
-                        -- "GenerateCode.ag"(line 378, column 13)
+                        -- "GenerateCode.ag"(line 388, column 13)
                         _semFun =
                             let  lhs = Fun _funcname lhs_args
                                  lhs_args = if _lhsInr == 0 then map field _firstOrderChildren     else _intraIexprs
@@ -3474,10 +3483,10 @@
                                             then \x -> App (typeName _lhsInt _lhsInr) [x]
                                             else id
                             in Decl lhs rhs Set.empty Set.empty
-                        -- "GenerateCode.ag"(line 408, column 13)
+                        -- "GenerateCode.ag"(line 418, column 13)
                         _tsig =
                             TSig _funcname _semType
-                        -- "GenerateCode.ag"(line 409, column 13)
+                        -- "GenerateCode.ag"(line 419, column 13)
                         _semType =
                             let argType (NT tp tps)  r   | tp /= _SELF = typeAppStrs (sdtype tp) tps `Arr` r
                                                          | tp == _SELF = error "GenerateCode: found an intra-type with type SELF, which should have been prevented by CRule.tps"
@@ -3488,7 +3497,7 @@
                                if  _lhsInr == 0
                                    then foldr argType (typeAppStrs (sdtype   _lhsInt        ) _params    ) (map (\(_,t,_) -> t) _firstOrderChildren    )
                                    else foldr argType (typeAppStrs (typeName _lhsInt _lhsInr) _params    ) _intraItps
-                        -- "GenerateCode.ag"(line 420, column 13)
+                        -- "GenerateCode.ag"(line 430, column 13)
                         _lhsOdecls =
                             ( if  _lhsIwith_sig
                               then [_tsig, _semFun]
@@ -3498,45 +3507,45 @@
                               then _blockFunDecls
                               else []
                             )
-                        -- "GenerateCode.ag"(line 428, column 13)
+                        -- "GenerateCode.ag"(line 438, column 13)
                         _typeSigs =
                             if  _lhsIo_sig && not _o_case
                                 then  _vssItSigs
                                 else  []
-                        -- "GenerateCode.ag"(line 431, column 13)
+                        -- "GenerateCode.ag"(line 441, column 13)
                         _o_case =
                             _lhsIo_case && ordered_ && not (hasPragma _lhsIallPragmas _lhsInt _lhsIcon _NOCASE)
-                        -- "GenerateCode.ag"(line 432, column 13)
+                        -- "GenerateCode.ag"(line 442, column 13)
                         _o_splitsems =
                             ordered_ && _lhsIo_splitsems
-                        -- "GenerateCode.ag"(line 454, column 7)
+                        -- "GenerateCode.ag"(line 464, column 7)
                         _lhsOgatherInstVisitNrs =
                             Map.fromList [(i,_lhsInr) | i <- _vssIdefinedInsts]
-                        -- "GenerateCode.ag"(line 465, column 7)
+                        -- "GenerateCode.ag"(line 475, column 7)
                         _vssOdeclsAbove =
                             []
-                        -- "GenerateCode.ag"(line 466, column 7)
+                        -- "GenerateCode.ag"(line 476, column 7)
                         _intraOdeclsAbove =
                             error "declsAbove: not used here"
-                        -- "GenerateCode.ag"(line 712, column 13)
+                        -- "GenerateCode.ag"(line 722, column 13)
                         _lhsOallTpsFound =
                             _intraIallTpsFound
-                        -- "GenerateCode.ag"(line 723, column 13)
+                        -- "GenerateCode.ag"(line 733, column 13)
                         _lhsOerrors =
                             _intraIerrors
-                        -- "GenerateCode.ag"(line 756, column 18)
+                        -- "GenerateCode.ag"(line 766, column 18)
                         _lhsOcomments =
                             let body = map ind (_vssIcomments ++ _intraIcomments)
                             in if null body
                                then []
                                else ("visit " ++ show _lhsInr ++ ":") : body
-                        -- "GenerateCode.ag"(line 760, column 18)
+                        -- "GenerateCode.ag"(line 770, column 18)
                         _vssOwhat =
                             "local"
-                        -- "GenerateCode.ag"(line 761, column 18)
+                        -- "GenerateCode.ag"(line 771, column 18)
                         _intraOwhat =
                             "intra"
-                        -- "GenerateCode.ag"(line 995, column 7)
+                        -- "GenerateCode.ag"(line 1005, column 7)
                         _lhsOsemNames =
                             [_funcname    ]
                         -- copy rule (down)
@@ -3942,43 +3951,43 @@
                          _tlIintraVars :: (Set String)
                          _tlIisNil :: Bool
                          _tlIsemNames :: ([String])
-                         -- "GenerateCode.ag"(line 216, column 11)
+                         -- "GenerateCode.ag"(line 226, column 11)
                          _tlOnr =
                              _lhsInr + 1
-                         -- "GenerateCode.ag"(line 229, column 12)
+                         -- "GenerateCode.ag"(line 239, column 12)
                          _lhsOisNil =
                              False
-                         -- "GenerateCode.ag"(line 230, column 12)
+                         -- "GenerateCode.ag"(line 240, column 12)
                          _hdOisLast =
                              _tlIisNil
-                         -- "GenerateCode.ag"(line 247, column 12)
+                         -- "GenerateCode.ag"(line 257, column 12)
                          _hdOnextIntra =
                              _tlIintra
-                         -- "GenerateCode.ag"(line 248, column 12)
+                         -- "GenerateCode.ag"(line 258, column 12)
                          _hdOnextIntraVars =
                              _tlIintraVars
-                         -- "GenerateCode.ag"(line 249, column 12)
+                         -- "GenerateCode.ag"(line 259, column 12)
                          _lhsOintra =
                              _hdIintra
-                         -- "GenerateCode.ag"(line 250, column 12)
+                         -- "GenerateCode.ag"(line 260, column 12)
                          _lhsOintraVars =
                              _hdIintraVars
-                         -- use rule "GenerateCode.ag"(line 706, column 39)
+                         -- use rule "GenerateCode.ag"(line 716, column 39)
                          _lhsOallTpsFound =
                              _hdIallTpsFound && _tlIallTpsFound
-                         -- use rule "GenerateCode.ag"(line 738, column 52)
+                         -- use rule "GenerateCode.ag"(line 748, column 52)
                          _lhsOcomments =
                              _hdIcomments ++ _tlIcomments
-                         -- use rule "GenerateCode.ag"(line 355, column 33)
+                         -- use rule "GenerateCode.ag"(line 365, column 33)
                          _lhsOdecls =
                              _hdIdecls ++ _tlIdecls
-                         -- use rule "GenerateCode.ag"(line 719, column 32)
+                         -- use rule "GenerateCode.ag"(line 729, column 32)
                          _lhsOerrors =
                              _hdIerrors Seq.>< _tlIerrors
-                         -- use rule "GenerateCode.ag"(line 447, column 44)
+                         -- use rule "GenerateCode.ag"(line 457, column 44)
                          _lhsOgatherInstVisitNrs =
                              _hdIgatherInstVisitNrs `Map.union` _tlIgatherInstVisitNrs
-                         -- use rule "GenerateCode.ag"(line 985, column 61)
+                         -- use rule "GenerateCode.ag"(line 995, column 61)
                          _lhsOsemNames =
                              _hdIsemNames ++ _tlIsemNames
                          -- copy rule (down)
@@ -4211,31 +4220,31 @@
                          _lhsOerrors :: (Seq Error)
                          _lhsOgatherInstVisitNrs :: (Map Identifier Int)
                          _lhsOsemNames :: ([String])
-                         -- "GenerateCode.ag"(line 231, column 10)
+                         -- "GenerateCode.ag"(line 241, column 10)
                          _lhsOisNil =
                              True
-                         -- "GenerateCode.ag"(line 251, column 10)
+                         -- "GenerateCode.ag"(line 261, column 10)
                          _lhsOintra =
                              []
-                         -- "GenerateCode.ag"(line 252, column 10)
+                         -- "GenerateCode.ag"(line 262, column 10)
                          _lhsOintraVars =
                              Set.empty
-                         -- use rule "GenerateCode.ag"(line 706, column 39)
+                         -- use rule "GenerateCode.ag"(line 716, column 39)
                          _lhsOallTpsFound =
                              True
-                         -- use rule "GenerateCode.ag"(line 738, column 52)
+                         -- use rule "GenerateCode.ag"(line 748, column 52)
                          _lhsOcomments =
                              []
-                         -- use rule "GenerateCode.ag"(line 355, column 33)
+                         -- use rule "GenerateCode.ag"(line 365, column 33)
                          _lhsOdecls =
                              []
-                         -- use rule "GenerateCode.ag"(line 719, column 32)
+                         -- use rule "GenerateCode.ag"(line 729, column 32)
                          _lhsOerrors =
                              Seq.empty
-                         -- use rule "GenerateCode.ag"(line 447, column 44)
+                         -- use rule "GenerateCode.ag"(line 457, column 44)
                          _lhsOgatherInstVisitNrs =
                              Map.empty
-                         -- use rule "GenerateCode.ag"(line 985, column 61)
+                         -- use rule "GenerateCode.ag"(line 995, column 61)
                          _lhsOsemNames =
                              []
                      in  ( _lhsOallTpsFound,_lhsOcomments,_lhsOdecls,_lhsOerrors,_lhsOgatherInstVisitNrs,_lhsOintra,_lhsOintraVars,_lhsOisNil,_lhsOsemNames))) )
@@ -4314,25 +4323,25 @@
                             _nextIcallExpr :: Expr
                             _nextIdecls :: ([Decl])
                             _nextIfreeVars :: ([String])
-                            -- "GenerateCode.ag"(line 544, column 7)
+                            -- "GenerateCode.ag"(line 554, column 7)
                             _nextOblockNr =
                                 _lhsIblockNr + 1
-                            -- "GenerateCode.ag"(line 549, column 7)
+                            -- "GenerateCode.ag"(line 559, column 7)
                             _lambdaName =
                                 _lhsIprefix ++ "_block" ++ show _lhsIblockNr
-                            -- "GenerateCode.ag"(line 550, column 7)
+                            -- "GenerateCode.ag"(line 560, column 7)
                             _pragmaDecl =
                                 PragmaDecl ("NOINLINE " ++ _lambdaName    )
-                            -- "GenerateCode.ag"(line 551, column 7)
+                            -- "GenerateCode.ag"(line 561, column 7)
                             _lhsOcallExpr =
                                 App _lambdaName     (map SimpleExpr _freeVars    )
-                            -- "GenerateCode.ag"(line 555, column 7)
+                            -- "GenerateCode.ag"(line 565, column 7)
                             _freeVars =
                                 freevars _nextIfreeVars (visit_ : defs_)
-                            -- "GenerateCode.ag"(line 562, column 7)
+                            -- "GenerateCode.ag"(line 572, column 7)
                             _decl =
                                 mkBlockLambda _lhsIoptCase _lambdaName     _freeVars     (defs_ ++ [visit_]) _nextIcallExpr
-                            -- "GenerateCode.ag"(line 563, column 7)
+                            -- "GenerateCode.ag"(line 573, column 7)
                             _lhsOdecls =
                                 (if _lhsIblockNr > 1 then [_pragmaDecl    ] else []) ++ [_decl    ] ++ _nextIdecls
                             -- copy rule (from local)
@@ -4365,19 +4374,19 @@
                        (let _lhsOcallExpr :: Expr
                             _lhsOdecls :: ([Decl])
                             _lhsOfreeVars :: ([String])
-                            -- "GenerateCode.ag"(line 549, column 7)
+                            -- "GenerateCode.ag"(line 559, column 7)
                             _lambdaName =
                                 _lhsIprefix ++ "_block" ++ show _lhsIblockNr
-                            -- "GenerateCode.ag"(line 550, column 7)
+                            -- "GenerateCode.ag"(line 560, column 7)
                             _pragmaDecl =
                                 PragmaDecl ("NOINLINE " ++ _lambdaName    )
-                            -- "GenerateCode.ag"(line 551, column 7)
+                            -- "GenerateCode.ag"(line 561, column 7)
                             _lhsOcallExpr =
                                 App _lambdaName     (map SimpleExpr _freeVars    )
-                            -- "GenerateCode.ag"(line 553, column 7)
+                            -- "GenerateCode.ag"(line 563, column 7)
                             _freeVars =
                                 freevars _lhsIlastExprVars (defs_ ++ _lhsInextVisitDecls)
-                            -- "GenerateCode.ag"(line 560, column 7)
+                            -- "GenerateCode.ag"(line 570, column 7)
                             _lhsOdecls =
                                 [ mkBlockLambda _lhsIoptCase _lambdaName     _freeVars     (defs_ ++ _lhsInextVisitDecls) result_ ]
                             -- copy rule (from local)
@@ -4436,13 +4445,13 @@
                                 _blocksIcallExpr :: Expr
                                 _blocksIdecls :: ([Decl])
                                 _blocksIfreeVars :: ([String])
-                                -- "GenerateCode.ag"(line 535, column 7)
+                                -- "GenerateCode.ag"(line 545, column 7)
                                 _lhsOlambdas =
                                     _blocksIdecls
-                                -- "GenerateCode.ag"(line 536, column 7)
+                                -- "GenerateCode.ag"(line 546, column 7)
                                 _lhsOfirstCall =
                                     _blocksIcallExpr
-                                -- "GenerateCode.ag"(line 541, column 7)
+                                -- "GenerateCode.ag"(line 551, column 7)
                                 _blocksOblockNr =
                                     1
                                 -- copy rule (down)
@@ -4533,10 +4542,10 @@
                     _partsIcopy :: Patterns
                     _partsIdefinedInsts :: ([Identifier])
                     _partsIpatternAttributes :: ([(Identifier, Identifier)])
-                    -- "GenerateCode.ag"(line 197, column 11)
+                    -- "GenerateCode.ag"(line 207, column 11)
                     _lhsOdefinedInsts =
                         (if field_ == _INST then [attr_] else []) ++ _patIdefinedInsts
-                    -- "GenerateCode.ag"(line 205, column 7)
+                    -- "GenerateCode.ag"(line 215, column 7)
                     _lhsOpatternAttributes =
                         (field_,attr_) : (_patIpatternAttributes ++ _partsIpatternAttributes)
                     -- self rule
@@ -4560,10 +4569,10 @@
                     _patsIcopy :: Patterns
                     _patsIdefinedInsts :: ([Identifier])
                     _patsIpatternAttributes :: ([(Identifier, Identifier)])
-                    -- use rule "GenerateCode.ag"(line 195, column 55)
+                    -- use rule "GenerateCode.ag"(line 205, column 55)
                     _lhsOdefinedInsts =
                         _patsIdefinedInsts
-                    -- use rule "GenerateCode.ag"(line 202, column 47)
+                    -- use rule "GenerateCode.ag"(line 212, column 47)
                     _lhsOpatternAttributes =
                         _patsIpatternAttributes
                     -- self rule
@@ -4584,10 +4593,10 @@
                     _patIcopy :: Pattern
                     _patIdefinedInsts :: ([Identifier])
                     _patIpatternAttributes :: ([(Identifier, Identifier)])
-                    -- use rule "GenerateCode.ag"(line 195, column 55)
+                    -- use rule "GenerateCode.ag"(line 205, column 55)
                     _lhsOdefinedInsts =
                         _patIdefinedInsts
-                    -- use rule "GenerateCode.ag"(line 202, column 47)
+                    -- use rule "GenerateCode.ag"(line 212, column 47)
                     _lhsOpatternAttributes =
                         _patIpatternAttributes
                     -- self rule
@@ -4609,10 +4618,10 @@
                     _patsIcopy :: Patterns
                     _patsIdefinedInsts :: ([Identifier])
                     _patsIpatternAttributes :: ([(Identifier, Identifier)])
-                    -- use rule "GenerateCode.ag"(line 195, column 55)
+                    -- use rule "GenerateCode.ag"(line 205, column 55)
                     _lhsOdefinedInsts =
                         _patsIdefinedInsts
-                    -- use rule "GenerateCode.ag"(line 202, column 47)
+                    -- use rule "GenerateCode.ag"(line 212, column 47)
                     _lhsOpatternAttributes =
                         _patsIpatternAttributes
                     -- self rule
@@ -4630,10 +4639,10 @@
     (T_Pattern (let _lhsOdefinedInsts :: ([Identifier])
                     _lhsOpatternAttributes :: ([(Identifier, Identifier)])
                     _lhsOcopy :: Pattern
-                    -- use rule "GenerateCode.ag"(line 195, column 55)
+                    -- use rule "GenerateCode.ag"(line 205, column 55)
                     _lhsOdefinedInsts =
                         []
-                    -- use rule "GenerateCode.ag"(line 202, column 47)
+                    -- use rule "GenerateCode.ag"(line 212, column 47)
                     _lhsOpatternAttributes =
                         []
                     -- self rule
@@ -4689,10 +4698,10 @@
                      _tlIcopy :: Patterns
                      _tlIdefinedInsts :: ([Identifier])
                      _tlIpatternAttributes :: ([(Identifier, Identifier)])
-                     -- use rule "GenerateCode.ag"(line 195, column 55)
+                     -- use rule "GenerateCode.ag"(line 205, column 55)
                      _lhsOdefinedInsts =
                          _hdIdefinedInsts ++ _tlIdefinedInsts
-                     -- use rule "GenerateCode.ag"(line 202, column 47)
+                     -- use rule "GenerateCode.ag"(line 212, column 47)
                      _lhsOpatternAttributes =
                          _hdIpatternAttributes ++ _tlIpatternAttributes
                      -- self rule
@@ -4711,10 +4720,10 @@
     (T_Patterns (let _lhsOdefinedInsts :: ([Identifier])
                      _lhsOpatternAttributes :: ([(Identifier, Identifier)])
                      _lhsOcopy :: Patterns
-                     -- use rule "GenerateCode.ag"(line 195, column 55)
+                     -- use rule "GenerateCode.ag"(line 205, column 55)
                      _lhsOdefinedInsts =
                          []
-                     -- use rule "GenerateCode.ag"(line 202, column 47)
+                     -- use rule "GenerateCode.ag"(line 212, column 47)
                      _lhsOpatternAttributes =
                          []
                      -- self rule
@@ -4957,34 +4966,34 @@
                           _tlItSigs :: ([Decl])
                           _tlItps :: ([Type])
                           _tlIusedVars :: (Set String)
-                          -- "GenerateCode.ag"(line 476, column 7)
+                          -- "GenerateCode.ag"(line 486, column 7)
                           _lhsOblockDecls =
                               _hdIbldBlocksFun _tlIblockDecls
-                          -- use rule "GenerateCode.ag"(line 344, column 39)
+                          -- use rule "GenerateCode.ag"(line 354, column 39)
                           _lhsOallTpsFound =
                               _hdIallTpsFound && _tlIallTpsFound
-                          -- use rule "GenerateCode.ag"(line 738, column 52)
+                          -- use rule "GenerateCode.ag"(line 748, column 52)
                           _lhsOcomments =
                               _hdIcomments ++ _tlIcomments
                           -- use rule "GenerateCode.ag"(line 138, column 34)
                           _lhsOdecls =
                               _hdIdecls ++ _tlIdecls
-                          -- use rule "GenerateCode.ag"(line 195, column 55)
+                          -- use rule "GenerateCode.ag"(line 205, column 55)
                           _lhsOdefinedInsts =
                               _hdIdefinedInsts ++ _tlIdefinedInsts
-                          -- use rule "GenerateCode.ag"(line 719, column 32)
+                          -- use rule "GenerateCode.ag"(line 729, column 32)
                           _lhsOerrors =
                               _hdIerrors Seq.>< _tlIerrors
-                          -- use rule "GenerateCode.ag"(line 268, column 34)
+                          -- use rule "GenerateCode.ag"(line 278, column 34)
                           _lhsOexprs =
                               _hdIexprs ++ _tlIexprs
-                          -- use rule "GenerateCode.ag"(line 297, column 33)
+                          -- use rule "GenerateCode.ag"(line 307, column 33)
                           _lhsOtSigs =
                               _hdItSigs ++ _tlItSigs
-                          -- use rule "GenerateCode.ag"(line 343, column 31)
+                          -- use rule "GenerateCode.ag"(line 353, column 31)
                           _lhsOtps =
                               _hdItps ++ _tlItps
-                          -- use rule "GenerateCode.ag"(line 286, column 37)
+                          -- use rule "GenerateCode.ag"(line 296, column 37)
                           _lhsOusedVars =
                               _hdIusedVars `Set.union` _tlIusedVars
                           -- copy rule (up)
@@ -5229,34 +5238,34 @@
                           _lhsOtps :: ([Type])
                           _lhsOusedVars :: (Set String)
                           _lhsOdeclsAbove :: ([Decl])
-                          -- "GenerateCode.ag"(line 478, column 7)
+                          -- "GenerateCode.ag"(line 488, column 7)
                           _lhsOblockDecls =
                               DeclTerminator _lhsIdeclsAbove _lhsIlastExpr
-                          -- use rule "GenerateCode.ag"(line 344, column 39)
+                          -- use rule "GenerateCode.ag"(line 354, column 39)
                           _lhsOallTpsFound =
                               True
-                          -- use rule "GenerateCode.ag"(line 738, column 52)
+                          -- use rule "GenerateCode.ag"(line 748, column 52)
                           _lhsOcomments =
                               []
                           -- use rule "GenerateCode.ag"(line 138, column 34)
                           _lhsOdecls =
                               []
-                          -- use rule "GenerateCode.ag"(line 195, column 55)
+                          -- use rule "GenerateCode.ag"(line 205, column 55)
                           _lhsOdefinedInsts =
                               []
-                          -- use rule "GenerateCode.ag"(line 719, column 32)
+                          -- use rule "GenerateCode.ag"(line 729, column 32)
                           _lhsOerrors =
                               Seq.empty
-                          -- use rule "GenerateCode.ag"(line 268, column 34)
+                          -- use rule "GenerateCode.ag"(line 278, column 34)
                           _lhsOexprs =
                               []
-                          -- use rule "GenerateCode.ag"(line 297, column 33)
+                          -- use rule "GenerateCode.ag"(line 307, column 33)
                           _lhsOtSigs =
                               []
-                          -- use rule "GenerateCode.ag"(line 343, column 31)
+                          -- use rule "GenerateCode.ag"(line 353, column 31)
                           _lhsOtps =
                               []
-                          -- use rule "GenerateCode.ag"(line 286, column 37)
+                          -- use rule "GenerateCode.ag"(line 296, column 37)
                           _lhsOusedVars =
                               Set.empty
                           -- copy rule (chain)
diff --git a/src-derived/PrintCode.hs b/src-derived/PrintCode.hs
--- a/src-derived/PrintCode.hs
+++ b/src-derived/PrintCode.hs
@@ -1409,6 +1409,9 @@
             local hasStrictVars : _
             local strictGuard : _
             local addStrictGuard : _
+      alternative Unwrap:
+         child name           : {String}
+         child sub            : Lhs 
 -}
 -- cata
 sem_Lhs :: Lhs  ->
@@ -1423,6 +1426,8 @@
     (sem_Lhs_TupleLhs _comps )
 sem_Lhs !(UnboxedTupleLhs _comps )  =
     (sem_Lhs_UnboxedTupleLhs _comps )
+sem_Lhs !(Unwrap _name _sub )  =
+    (sem_Lhs_Unwrap _name (sem_Lhs _sub ) )
 -- semantic domain
 newtype T_Lhs  = T_Lhs (Bool ->
                         Bool ->
@@ -1553,6 +1558,27 @@
                     (case (_addStrictGuard     $ ppUnboxedTuple _lhsInested (map (_addBang     . text) comps_)) of
                      { !_lhsOpp ->
                      ( _lhsOpp) }) }) }) }) })) )
+sem_Lhs_Unwrap :: String ->
+                  T_Lhs  ->
+                  T_Lhs 
+sem_Lhs_Unwrap !name_ !(T_Lhs sub_ )  =
+    (T_Lhs (\ (!_lhsIisDeclOfLet)
+              (!_lhsInested)
+              (!_lhsIoptions)
+              (!_lhsIoutputfile) ->
+                (case (_lhsIoutputfile) of
+                 { !_subOoutputfile ->
+                 (case (_lhsIoptions) of
+                  { !_subOoptions ->
+                  (case (_lhsInested) of
+                   { !_subOnested ->
+                   (case (_lhsIisDeclOfLet) of
+                    { !_subOisDeclOfLet ->
+                    (case ((sub_ _subOisDeclOfLet _subOnested _subOoptions _subOoutputfile )) of
+                     { ( !_subIpp) ->
+                     (case (pp_parens (name_ >#< _subIpp)) of
+                      { !_lhsOpp ->
+                      ( _lhsOpp) }) }) }) }) }) })) )
 -- Pattern -----------------------------------------------------
 {-
    visit 0:
diff --git a/src-derived/Transform.hs b/src-derived/Transform.hs
--- a/src-derived/Transform.hs
+++ b/src-derived/Transform.hs
@@ -135,9 +135,10 @@
            else (TypeSig ide typ:sigs, errs)
     in  foldr checkSig ([],Seq.empty) sis
 
-checkInsts :: Set NontermIdent -> Map NontermIdent (Map ConstructorIdent [SigInfo]) -> NontermIdent -> ConstructorIdent -> [Identifier] -> InstsAndErrors
-checkInsts allNts sigMap nt con
+checkInsts :: Set NontermIdent -> Map NontermIdent (Map ConstructorIdent [SigInfo]) -> Map NontermIdent (Map ConstructorIdent [(Identifier, Type)]) -> NontermIdent -> ConstructorIdent -> [Identifier] -> InstsAndErrors
+checkInsts allNts sigMap fieldMap nt con
   = foldr (\inst (insts, errs) ->
+      checkDup inst insts errs $ 
               maybe (insts, Seq.singleton (MissingInstSig nt con inst) >< errs)
                     (\info@(_, NT nm _) -> case nm `Set.member` allNts of
                                              True  -> (info : insts, errs)
@@ -155,6 +156,15 @@
     findSig name
       = do tp@(NT _ _) <- lookup name sigs
            return (name, tp)
+    
+    checkDup name insts errs e
+      = let fields = Map.findWithDefault [] con $ Map.findWithDefault Map.empty nt fieldMap
+            walk [] = Nothing
+            walk ((i,_): fs) | i == name = Just name
+                             | otherwise = walk fs
+        in case walk fields of
+             Just occ -> (insts, Seq.singleton (DupChild nt con name occ) >< errs)
+             Nothing  -> e
 
 checkUniques :: Map NontermIdent (Attributes, Attributes) -> NontermIdent -> ConstructorIdent -> [UniqueInfo] -> UniquesAndErrors
 checkUniques allAttrs nt con uniques
@@ -487,7 +497,7 @@
                         Map.mapWithKey (Map.mapWithKey . (checkSigs                                                 )) _allSigs
                     -- "Transform.ag"(line 268, column 10)
                     _allInstsErrs =
-                        Map.mapWithKey (Map.mapWithKey . (checkInsts _allNonterminals     _allSigs                  )) _allInsts
+                        Map.mapWithKey (Map.mapWithKey . (checkInsts _allNonterminals     _allSigs     _allFields   )) _allInsts
                     -- "Transform.ag"(line 269, column 10)
                     _allUniquesErrs =
                         Map.mapWithKey (Map.mapWithKey . (checkUniques _allAttrDecls                                )) _allUniques
@@ -548,22 +558,22 @@
                     -- "Transform.ag"(line 305, column 10)
                     _lhsOerrors =
                         _elemsIerrors >< _errs1 >< _errs2 >< _errs3 >< _errs4 >< _errs5 >< _errs6 >< _errs7 >< _errs8
-                    -- "Transform.ag"(line 455, column 10)
+                    -- "Transform.ag"(line 465, column 10)
                     _allNonterminals =
                         _elemsIcollectedNames `Set.difference` _elemsIcollectedSetNames
-                    -- "Transform.ag"(line 475, column 8)
+                    -- "Transform.ag"(line 485, column 8)
                     _elemsOallConstructors =
                         _elemsIcollectedConstructorsMap
-                    -- "Transform.ag"(line 548, column 8)
+                    -- "Transform.ag"(line 558, column 8)
                     _elemsOdefSets =
                         Map.fromList (map (\x->(x,(Set.singleton x, Set.empty))) (Set.toList _allNonterminals    ))
-                    -- "Transform.ag"(line 549, column 8)
+                    -- "Transform.ag"(line 559, column 8)
                     _elemsOdefinedSets =
                         Map.map fst _elemsIdefSets
-                    -- "Transform.ag"(line 801, column 8)
+                    -- "Transform.ag"(line 811, column 8)
                     _elemsOattrDecls =
                         Map.empty
-                    -- "Transform.ag"(line 840, column 9)
+                    -- "Transform.ag"(line 850, column 9)
                     _allAttrDecls =
                         if withSelf _lhsIoptions
                          then foldr addSelf _elemsIattrDecls (Set.toList _allNonterminals    )
@@ -571,10 +581,10 @@
                     -- use rule "Transform.ag"(line 44, column 19)
                     _lhsOblocks =
                         _elemsIblocks
-                    -- use rule "Transform.ag"(line 943, column 37)
+                    -- use rule "Transform.ag"(line 953, column 37)
                     _lhsOmoduleDecl =
                         _elemsImoduleDecl
-                    -- use rule "Transform.ag"(line 630, column 34)
+                    -- use rule "Transform.ag"(line 640, column 34)
                     _lhsOpragmas =
                         _elemsIpragmas
                     -- copy rule (from local)
@@ -810,16 +820,16 @@
                   (let _lhsOuseMap :: (Map NontermIdent (Map Identifier (String,String,String)))
                        _lhsOerrors :: (Seq Error)
                        _lhsOattrDecls :: (Map NontermIdent (Attributes, Attributes))
-                       -- "Transform.ag"(line 809, column 15)
+                       -- "Transform.ag"(line 819, column 15)
                        __tup1 =
                            checkAttrs _lhsIallFields (Set.toList _lhsInts) _inherited _synthesized _lhsIattrDecls
-                       -- "Transform.ag"(line 809, column 15)
+                       -- "Transform.ag"(line 819, column 15)
                        (_attrDecls,_) =
                            __tup1
-                       -- "Transform.ag"(line 809, column 15)
+                       -- "Transform.ag"(line 819, column 15)
                        (_,_errors) =
                            __tup1
-                       -- "Transform.ag"(line 811, column 15)
+                       -- "Transform.ag"(line 821, column 15)
                        __tup2 =
                            let splitAttrs xs = unzip [ ((n,makeType _lhsIallNonterminals t),(n,ud))
                                                      | (n,t,ud) <- xs
@@ -829,16 +839,16 @@
                                (syn,uses2) = splitAttrs syn_
                                isUse (n,(e1,e2,_)) = not (null e1 || null e2)
                            in (inh++chn,chn++syn, Map.fromList (Prelude.filter isUse (uses1++uses2)))
-                       -- "Transform.ag"(line 811, column 15)
+                       -- "Transform.ag"(line 821, column 15)
                        (_inherited,_,_) =
                            __tup2
-                       -- "Transform.ag"(line 811, column 15)
+                       -- "Transform.ag"(line 821, column 15)
                        (_,_synthesized,_) =
                            __tup2
-                       -- "Transform.ag"(line 811, column 15)
+                       -- "Transform.ag"(line 821, column 15)
                        (_,_,_useMap) =
                            __tup2
-                       -- "Transform.ag"(line 819, column 11)
+                       -- "Transform.ag"(line 829, column 11)
                        _lhsOuseMap =
                            Map.fromList (zip (Set.toList _lhsInts) (repeat _useMap))
                        -- use rule "Transform.ag"(line 42, column 19)
@@ -893,7 +903,7 @@
     (T_ConstructorSet (let _lhsOconstructors :: ((Set ConstructorIdent->Set ConstructorIdent))
                            _lhsOcollectedConstructorNames :: (Set ConstructorIdent)
                            _lhsOerrors :: (Seq Error)
-                           -- "Transform.ag"(line 615, column 17)
+                           -- "Transform.ag"(line 625, column 17)
                            _lhsOconstructors =
                                \ds -> ds
                            -- use rule "Transform.ag"(line 90, column 62)
@@ -916,7 +926,7 @@
                            _set2IcollectedConstructorNames :: (Set ConstructorIdent)
                            _set2Iconstructors :: ((Set ConstructorIdent->Set ConstructorIdent))
                            _set2Ierrors :: (Seq Error)
-                           -- "Transform.ag"(line 614, column 17)
+                           -- "Transform.ag"(line 624, column 17)
                            _lhsOconstructors =
                                \ds -> _set1Iconstructors ds `Set.difference` _set2Iconstructors ds
                            -- use rule "Transform.ag"(line 90, column 62)
@@ -936,10 +946,10 @@
     (T_ConstructorSet (let _lhsOcollectedConstructorNames :: (Set ConstructorIdent)
                            _lhsOconstructors :: ((Set ConstructorIdent->Set ConstructorIdent))
                            _lhsOerrors :: (Seq Error)
-                           -- "Transform.ag"(line 463, column 11)
+                           -- "Transform.ag"(line 473, column 11)
                            _lhsOcollectedConstructorNames =
                                Set.singleton name_
-                           -- "Transform.ag"(line 612, column 17)
+                           -- "Transform.ag"(line 622, column 17)
                            _lhsOconstructors =
                                \ds -> Set.singleton name_
                            -- use rule "Transform.ag"(line 42, column 19)
@@ -959,7 +969,7 @@
                            _set2IcollectedConstructorNames :: (Set ConstructorIdent)
                            _set2Iconstructors :: ((Set ConstructorIdent->Set ConstructorIdent))
                            _set2Ierrors :: (Seq Error)
-                           -- "Transform.ag"(line 613, column 17)
+                           -- "Transform.ag"(line 623, column 17)
                            _lhsOconstructors =
                                \ds -> _set1Iconstructors ds `Set.union`      _set2Iconstructors ds
                            -- use rule "Transform.ag"(line 90, column 62)
@@ -1158,15 +1168,15 @@
                       _attrsIattrDecls :: (Map NontermIdent (Attributes, Attributes))
                       _attrsIerrors :: (Seq Error)
                       _attrsIuseMap :: (Map NontermIdent (Map Identifier (String,String,String)))
-                      -- "Transform.ag"(line 761, column 7)
+                      -- "Transform.ag"(line 771, column 7)
                       _lhsOctxCollect =
                           if null ctx_
                           then Map.empty
                           else Map.fromList [(nt, ctx_) | nt <- Set.toList _namesInontSet]
-                      -- "Transform.ag"(line 805, column 10)
+                      -- "Transform.ag"(line 815, column 10)
                       _attrsOnts =
                           _namesInontSet
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -1199,31 +1209,31 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           _namesIerrors Seq.>< _attrsIerrors
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           _attrsIuseMap
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (up)
@@ -1315,26 +1325,26 @@
                       -- "Transform.ag"(line 163, column 10)
                       _altsOnts =
                           _namesInontSet
-                      -- "Transform.ag"(line 469, column 11)
+                      -- "Transform.ag"(line 479, column 11)
                       _lhsOcollectedConstructorsMap =
                           Map.fromList
                           [ (n, _altsIcollectedConstructorNames)
                           | n <- Set.toList _namesInontSet
                           ]
-                      -- "Transform.ag"(line 738, column 7)
+                      -- "Transform.ag"(line 748, column 7)
                       _lhsOparamsCollect =
                           if null params_
                           then Map.empty
                           else Map.fromList [(nt, params_) | nt <- Set.toList _namesInontSet]
-                      -- "Transform.ag"(line 761, column 7)
+                      -- "Transform.ag"(line 771, column 7)
                       _lhsOctxCollect =
                           if null ctx_
                           then Map.empty
                           else Map.fromList [(nt, ctx_) | nt <- Set.toList _namesInontSet]
-                      -- "Transform.ag"(line 804, column 10)
+                      -- "Transform.ag"(line 814, column 10)
                       _attrsOnts =
                           _namesInontSet
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -1364,28 +1374,28 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           _namesIerrors Seq.>< _attrsIerrors
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           _attrsIuseMap
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (up)
@@ -1466,10 +1476,10 @@
                       _setIcollectedNames :: (Set Identifier)
                       _setIerrors :: (Seq Error)
                       _setInontSet :: (Set NontermIdent)
-                      -- "Transform.ag"(line 789, column 14)
+                      -- "Transform.ag"(line 799, column 14)
                       _lhsOderivings =
                           Map.fromList [(nt,Set.fromList classes_) | nt <- Set.toList _setInontSet]
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -1502,31 +1512,31 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 757, column 34)
+                      -- use rule "Transform.ag"(line 767, column 34)
                       _lhsOctxCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           _setIerrors
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           Map.empty
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (chain)
@@ -1583,10 +1593,10 @@
                       _lhsOwrappers :: (Set NontermIdent)
                       _lhsOattrDecls :: (Map NontermIdent (Attributes, Attributes))
                       _lhsOdefSets :: (Map Identifier (Set NontermIdent,Set Identifier))
-                      -- "Transform.ag"(line 947, column 7)
+                      -- "Transform.ag"(line 957, column 7)
                       _lhsOmoduleDecl =
                           Just (name_, exports_, imports_)
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -1619,31 +1629,31 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 757, column 34)
+                      -- use rule "Transform.ag"(line 767, column 34)
                       _lhsOctxCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           Seq.empty
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           Map.empty
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (chain)
@@ -1687,7 +1697,7 @@
                       _lhsOwrappers :: (Set NontermIdent)
                       _lhsOattrDecls :: (Map NontermIdent (Attributes, Attributes))
                       _lhsOdefSets :: (Map Identifier (Set NontermIdent,Set Identifier))
-                      -- "Transform.ag"(line 633, column 13)
+                      -- "Transform.ag"(line 643, column 13)
                       _lhsOpragmas =
                           let mk n o = case getName n of
                                          "gencatas"     -> o { folds       = True  }
@@ -1729,7 +1739,7 @@
                                          "nonewtypes"     -> o { newtypes = False }
                                          _              -> o
                           in \o -> foldr mk o names_
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -1762,31 +1772,31 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 757, column 34)
+                      -- use rule "Transform.ag"(line 767, column 34)
                       _lhsOctxCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           Seq.empty
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           Map.empty
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (chain)
@@ -1860,15 +1870,15 @@
                       -- "Transform.ag"(line 164, column 10)
                       _altsOnts =
                           _namesInontSet
-                      -- "Transform.ag"(line 761, column 7)
+                      -- "Transform.ag"(line 771, column 7)
                       _lhsOctxCollect =
                           if null ctx_
                           then Map.empty
                           else Map.fromList [(nt, ctx_) | nt <- Set.toList _namesInontSet]
-                      -- "Transform.ag"(line 806, column 10)
+                      -- "Transform.ag"(line 816, column 10)
                       _attrsOnts =
                           _namesInontSet
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           _altsIattrOrderCollect
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -1901,31 +1911,31 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           _altsIcollectedUniques
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           _namesIerrors Seq.>< _attrsIerrors Seq.>< _altsIerrors
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           _altsIsemPragmasCollect
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           _attrsIuseMap
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (up)
@@ -2006,10 +2016,10 @@
                       _setIcollectedNames :: (Set Identifier)
                       _setIerrors :: (Seq Error)
                       _setInontSet :: (Set NontermIdent)
-                      -- "Transform.ag"(line 446, column 10)
+                      -- "Transform.ag"(line 456, column 10)
                       _lhsOcollectedSetNames =
                           Set.singleton name_
-                      -- "Transform.ag"(line 553, column 13)
+                      -- "Transform.ag"(line 563, column 13)
                       __tup3 =
                           let allUsedNames = Set.unions [ maybe (Set.singleton n)
                                                                 snd
@@ -2021,19 +2031,19 @@
                                            | otherwise = (_setInontSet, Seq.empty)
                               (res, e2) = checkDuplicate DupSet  name_ (nontSet,Set.insert name_ allUsedNames) _lhsIdefSets
                           in (res, e1 Seq.>< e2)
-                      -- "Transform.ag"(line 553, column 13)
+                      -- "Transform.ag"(line 563, column 13)
                       (_defSets2,_) =
                           __tup3
-                      -- "Transform.ag"(line 553, column 13)
+                      -- "Transform.ag"(line 563, column 13)
                       (_,_errs) =
                           __tup3
-                      -- "Transform.ag"(line 563, column 9)
+                      -- "Transform.ag"(line 573, column 9)
                       _lhsOdefSets =
                           _defSets2
-                      -- "Transform.ag"(line 563, column 9)
+                      -- "Transform.ag"(line 573, column 9)
                       _lhsOerrors =
                           _errs >< _setIerrors
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -2063,31 +2073,31 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 757, column 34)
+                      -- use rule "Transform.ag"(line 767, column 34)
                       _lhsOctxCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           Map.empty
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (chain)
@@ -2157,7 +2167,7 @@
                       -- "Transform.ag"(line 182, column 10)
                       _lhsOblocks =
                           Map.singleton _blockInfo     _blockValue
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 150, column 32)
@@ -2187,34 +2197,34 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 757, column 34)
+                      -- use rule "Transform.ag"(line 767, column 34)
                       _lhsOctxCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           Seq.empty
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           Map.empty
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (chain)
@@ -2264,10 +2274,10 @@
                       -- "Transform.ag"(line 235, column 10)
                       _lhsOcollectedFields =
                           map (\(x,y)->(name_, x, y)) _expanded
-                      -- "Transform.ag"(line 449, column 11)
+                      -- "Transform.ag"(line 459, column 11)
                       _lhsOcollectedNames =
                           Set.singleton name_
-                      -- "Transform.ag"(line 503, column 11)
+                      -- "Transform.ag"(line 513, column 11)
                       _expanded =
                           case _argType of
                                   List tp -> [(Ident "Cons" pos_, [(Ident "hd" pos_, tp)
@@ -2298,7 +2308,7 @@
                                                  , (Ident "Nil" pos_, [])
                                                  ]
                                   Tuple xs -> [(Ident "Tuple" pos_, xs)]
-                      -- "Transform.ag"(line 532, column 11)
+                      -- "Transform.ag"(line 542, column 11)
                       _argType =
                           case type_ of
                            Maybe tp       -> Maybe  (  makeType _lhsIallNonterminals tp)
@@ -2307,20 +2317,20 @@
                            Tuple xs       -> Tuple [(f,makeType _lhsIallNonterminals tp) | (f,tp) <- xs]
                            Map tp1 tp2    -> Map    (  makeType _lhsIallNonterminals tp1) (makeType _lhsIallNonterminals tp2)
                            IntMap tp      -> IntMap (  makeType _lhsIallNonterminals tp)
-                      -- "Transform.ag"(line 539, column 11)
+                      -- "Transform.ag"(line 549, column 11)
                       _lhsOtypeSyns =
                           [(name_,_argType)]
-                      -- "Transform.ag"(line 744, column 7)
+                      -- "Transform.ag"(line 754, column 7)
                       _lhsOparamsCollect =
                           if null params_
                           then Map.empty
                           else Map.singleton name_ params_
-                      -- "Transform.ag"(line 767, column 7)
+                      -- "Transform.ag"(line 777, column 7)
                       _lhsOctxCollect =
                           if null ctx_
                           then Map.empty
                           else Map.singleton name_ ctx_
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -2347,25 +2357,25 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           Seq.empty
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 134, column 15)
                       _lhsOuseMap =
                           Map.empty
-                      -- use rule "Transform.ag"(line 621, column 32)
+                      -- use rule "Transform.ag"(line 631, column 32)
                       _lhsOwrappers =
                           Set.empty
                       -- copy rule (chain)
@@ -2415,10 +2425,10 @@
                       _setIcollectedNames :: (Set Identifier)
                       _setIerrors :: (Seq Error)
                       _setInontSet :: (Set NontermIdent)
-                      -- "Transform.ag"(line 624, column 13)
+                      -- "Transform.ag"(line 634, column 13)
                       _lhsOwrappers =
                           _setInontSet
-                      -- use rule "Transform.ag"(line 702, column 55)
+                      -- use rule "Transform.ag"(line 712, column 55)
                       _lhsOattrOrderCollect =
                           Map.empty
                       -- use rule "Transform.ag"(line 44, column 19)
@@ -2451,28 +2461,28 @@
                       -- use rule "Transform.ag"(line 149, column 32)
                       _lhsOcollectedUniques =
                           []
-                      -- use rule "Transform.ag"(line 757, column 34)
+                      -- use rule "Transform.ag"(line 767, column 34)
                       _lhsOctxCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 782, column 33)
+                      -- use rule "Transform.ag"(line 792, column 33)
                       _lhsOderivings =
                           Map.empty
                       -- use rule "Transform.ag"(line 42, column 19)
                       _lhsOerrors =
                           _setIerrors
-                      -- use rule "Transform.ag"(line 943, column 37)
+                      -- use rule "Transform.ag"(line 953, column 37)
                       _lhsOmoduleDecl =
                           mzero
-                      -- use rule "Transform.ag"(line 734, column 37)
+                      -- use rule "Transform.ag"(line 744, column 37)
                       _lhsOparamsCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 630, column 34)
+                      -- use rule "Transform.ag"(line 640, column 34)
                       _lhsOpragmas =
                           id
-                      -- use rule "Transform.ag"(line 674, column 56)
+                      -- use rule "Transform.ag"(line 684, column 56)
                       _lhsOsemPragmasCollect =
                           Map.empty
-                      -- use rule "Transform.ag"(line 490, column 32)
+                      -- use rule "Transform.ag"(line 500, column 32)
                       _lhsOtypeSyns =
                           []
                       -- use rule "Transform.ag"(line 134, column 15)
@@ -2653,7 +2663,7 @@
                        _tlItypeSyns :: TypeSyns
                        _tlIuseMap :: (Map NontermIdent (Map Identifier (String,String,String)))
                        _tlIwrappers :: (Set NontermIdent)
-                       -- use rule "Transform.ag"(line 702, column 55)
+                       -- use rule "Transform.ag"(line 712, column 55)
                        _lhsOattrOrderCollect =
                            _hdIattrOrderCollect `orderMapUnion` _tlIattrOrderCollect
                        -- use rule "Transform.ag"(line 44, column 19)
@@ -2686,34 +2696,34 @@
                        -- use rule "Transform.ag"(line 149, column 32)
                        _lhsOcollectedUniques =
                            _hdIcollectedUniques ++ _tlIcollectedUniques
-                       -- use rule "Transform.ag"(line 757, column 34)
+                       -- use rule "Transform.ag"(line 767, column 34)
                        _lhsOctxCollect =
                            _hdIctxCollect `mergeCtx` _tlIctxCollect
-                       -- use rule "Transform.ag"(line 782, column 33)
+                       -- use rule "Transform.ag"(line 792, column 33)
                        _lhsOderivings =
                            _hdIderivings `mergeDerivings` _tlIderivings
                        -- use rule "Transform.ag"(line 42, column 19)
                        _lhsOerrors =
                            _hdIerrors Seq.>< _tlIerrors
-                       -- use rule "Transform.ag"(line 943, column 37)
+                       -- use rule "Transform.ag"(line 953, column 37)
                        _lhsOmoduleDecl =
                            _hdImoduleDecl `mplus` _tlImoduleDecl
-                       -- use rule "Transform.ag"(line 734, column 37)
+                       -- use rule "Transform.ag"(line 744, column 37)
                        _lhsOparamsCollect =
                            _hdIparamsCollect `mergeParams` _tlIparamsCollect
-                       -- use rule "Transform.ag"(line 630, column 34)
+                       -- use rule "Transform.ag"(line 640, column 34)
                        _lhsOpragmas =
                            _hdIpragmas . _tlIpragmas
-                       -- use rule "Transform.ag"(line 674, column 56)
+                       -- use rule "Transform.ag"(line 684, column 56)
                        _lhsOsemPragmasCollect =
                            _hdIsemPragmasCollect `pragmaMapUnion` _tlIsemPragmasCollect
-                       -- use rule "Transform.ag"(line 490, column 32)
+                       -- use rule "Transform.ag"(line 500, column 32)
                        _lhsOtypeSyns =
                            _hdItypeSyns ++ _tlItypeSyns
                        -- use rule "Transform.ag"(line 134, column 15)
                        _lhsOuseMap =
                            _hdIuseMap `merge` _tlIuseMap
-                       -- use rule "Transform.ag"(line 621, column 32)
+                       -- use rule "Transform.ag"(line 631, column 32)
                        _lhsOwrappers =
                            _hdIwrappers `Set.union` _tlIwrappers
                        -- copy rule (up)
@@ -2801,7 +2811,7 @@
                        _lhsOwrappers :: (Set NontermIdent)
                        _lhsOattrDecls :: (Map NontermIdent (Attributes, Attributes))
                        _lhsOdefSets :: (Map Identifier (Set NontermIdent,Set Identifier))
-                       -- use rule "Transform.ag"(line 702, column 55)
+                       -- use rule "Transform.ag"(line 712, column 55)
                        _lhsOattrOrderCollect =
                            Map.empty
                        -- use rule "Transform.ag"(line 44, column 19)
@@ -2834,34 +2844,34 @@
                        -- use rule "Transform.ag"(line 149, column 32)
                        _lhsOcollectedUniques =
                            []
-                       -- use rule "Transform.ag"(line 757, column 34)
+                       -- use rule "Transform.ag"(line 767, column 34)
                        _lhsOctxCollect =
                            Map.empty
-                       -- use rule "Transform.ag"(line 782, column 33)
+                       -- use rule "Transform.ag"(line 792, column 33)
                        _lhsOderivings =
                            Map.empty
                        -- use rule "Transform.ag"(line 42, column 19)
                        _lhsOerrors =
                            Seq.empty
-                       -- use rule "Transform.ag"(line 943, column 37)
+                       -- use rule "Transform.ag"(line 953, column 37)
                        _lhsOmoduleDecl =
                            mzero
-                       -- use rule "Transform.ag"(line 734, column 37)
+                       -- use rule "Transform.ag"(line 744, column 37)
                        _lhsOparamsCollect =
                            Map.empty
-                       -- use rule "Transform.ag"(line 630, column 34)
+                       -- use rule "Transform.ag"(line 640, column 34)
                        _lhsOpragmas =
                            id
-                       -- use rule "Transform.ag"(line 674, column 56)
+                       -- use rule "Transform.ag"(line 684, column 56)
                        _lhsOsemPragmasCollect =
                            Map.empty
-                       -- use rule "Transform.ag"(line 490, column 32)
+                       -- use rule "Transform.ag"(line 500, column 32)
                        _lhsOtypeSyns =
                            []
                        -- use rule "Transform.ag"(line 134, column 15)
                        _lhsOuseMap =
                            Map.empty
-                       -- use rule "Transform.ag"(line 621, column 32)
+                       -- use rule "Transform.ag"(line 631, column 32)
                        _lhsOwrappers =
                            Set.empty
                        -- copy rule (chain)
@@ -2940,7 +2950,7 @@
                     (let _lhsOnontSet :: (Set NontermIdent)
                          _lhsOcollectedNames :: (Set Identifier)
                          _lhsOerrors :: (Seq Error)
-                         -- "Transform.ag"(line 567, column 16)
+                         -- "Transform.ag"(line 577, column 16)
                          _lhsOnontSet =
                              _lhsIallNonterminals
                          -- use rule "Transform.ag"(line 83, column 50)
@@ -2972,7 +2982,7 @@
                          _set2IcollectedNames :: (Set Identifier)
                          _set2Ierrors :: (Seq Error)
                          _set2InontSet :: (Set NontermIdent)
-                         -- "Transform.ag"(line 573, column 16)
+                         -- "Transform.ag"(line 583, column 16)
                          _lhsOnontSet =
                              Set.difference    _set1InontSet _set2InontSet
                          -- use rule "Transform.ag"(line 83, column 50)
@@ -3026,7 +3036,7 @@
                          _set2IcollectedNames :: (Set Identifier)
                          _set2Ierrors :: (Seq Error)
                          _set2InontSet :: (Set NontermIdent)
-                         -- "Transform.ag"(line 572, column 16)
+                         -- "Transform.ag"(line 582, column 16)
                          _lhsOnontSet =
                              Set.intersection  _set1InontSet _set2InontSet
                          -- use rule "Transform.ag"(line 83, column 50)
@@ -3067,18 +3077,18 @@
                     (let _lhsOcollectedNames :: (Set Identifier)
                          _lhsOerrors :: (Seq Error)
                          _lhsOnontSet :: (Set NontermIdent)
-                         -- "Transform.ag"(line 452, column 14)
+                         -- "Transform.ag"(line 462, column 14)
                          _lhsOcollectedNames =
                              Set.singleton name_
-                         -- "Transform.ag"(line 568, column 20)
+                         -- "Transform.ag"(line 578, column 20)
                          __tup4 =
                              case Map.lookup name_ _lhsIdefinedSets of
                                           Nothing  -> (Set.empty, Seq.singleton (UndefNont name_))
                                           Just set -> (set, Seq.empty)
-                         -- "Transform.ag"(line 568, column 20)
+                         -- "Transform.ag"(line 578, column 20)
                          (_nontSet,_) =
                              __tup4
-                         -- "Transform.ag"(line 568, column 20)
+                         -- "Transform.ag"(line 578, column 20)
                          (_,_errors) =
                              __tup4
                          -- use rule "Transform.ag"(line 42, column 19)
@@ -3098,11 +3108,11 @@
                     (let _lhsOnontSet :: (Set NontermIdent)
                          _lhsOerrors :: (Seq Error)
                          _lhsOcollectedNames :: (Set Identifier)
-                         -- "Transform.ag"(line 574, column 16)
+                         -- "Transform.ag"(line 584, column 16)
                          _lhsOnontSet =
                              let table = flattenDatas _lhsIallFields
                              in path table from_ to_
-                         -- "Transform.ag"(line 576, column 16)
+                         -- "Transform.ag"(line 586, column 16)
                          _lhsOerrors =
                              let check name | Set.member name _lhsIallNonterminals
                                                         = Seq.empty
@@ -3134,7 +3144,7 @@
                          _set2IcollectedNames :: (Set Identifier)
                          _set2Ierrors :: (Seq Error)
                          _set2InontSet :: (Set NontermIdent)
-                         -- "Transform.ag"(line 571, column 16)
+                         -- "Transform.ag"(line 581, column 16)
                          _lhsOnontSet =
                              Set.union         _set1InontSet _set2InontSet
                          -- use rule "Transform.ag"(line 83, column 50)
@@ -3246,16 +3256,16 @@
                     _partsIdefinedAttrs :: ([AttrName])
                     _partsIdefinedInsts :: ([Identifier])
                     _partsIpatunder :: ([AttrName]->Patterns)
-                    -- "Transform.ag"(line 919, column 11)
+                    -- "Transform.ag"(line 929, column 11)
                     _lhsOdefinedAttrs =
                         (field_, attr_) : _patIdefinedAttrs
-                    -- "Transform.ag"(line 920, column 11)
+                    -- "Transform.ag"(line 930, column 11)
                     _lhsOpatunder =
                         \us -> if ((field_,attr_) `elem` us) then Underscore noPos else _copy
-                    -- "Transform.ag"(line 921, column 11)
+                    -- "Transform.ag"(line 931, column 11)
                     _lhsOdefinedInsts =
                         (if field_ == _INST then [attr_] else []) ++ _patIdefinedInsts
-                    -- "Transform.ag"(line 936, column 16)
+                    -- "Transform.ag"(line 946, column 16)
                     _lhsOstpos =
                         getPos field_
                     -- self rule
@@ -3282,16 +3292,16 @@
                     _patsIdefinedAttrs :: ([AttrName])
                     _patsIdefinedInsts :: ([Identifier])
                     _patsIpatunder :: ([AttrName]->Patterns)
-                    -- "Transform.ag"(line 923, column 12)
+                    -- "Transform.ag"(line 933, column 12)
                     _lhsOpatunder =
                         \us -> Constr name_ (_patsIpatunder us)
-                    -- "Transform.ag"(line 934, column 16)
+                    -- "Transform.ag"(line 944, column 16)
                     _lhsOstpos =
                         getPos name_
-                    -- use rule "Transform.ag"(line 914, column 42)
+                    -- use rule "Transform.ag"(line 924, column 42)
                     _lhsOdefinedAttrs =
                         _patsIdefinedAttrs
-                    -- use rule "Transform.ag"(line 913, column 55)
+                    -- use rule "Transform.ag"(line 923, column 55)
                     _lhsOdefinedInsts =
                         _patsIdefinedInsts
                     -- self rule
@@ -3316,13 +3326,13 @@
                     _patIdefinedInsts :: ([Identifier])
                     _patIpatunder :: ([AttrName]->Pattern)
                     _patIstpos :: Pos
-                    -- "Transform.ag"(line 925, column 17)
+                    -- "Transform.ag"(line 935, column 17)
                     _lhsOpatunder =
                         \us -> Irrefutable (_patIpatunder us)
-                    -- use rule "Transform.ag"(line 914, column 42)
+                    -- use rule "Transform.ag"(line 924, column 42)
                     _lhsOdefinedAttrs =
                         _patIdefinedAttrs
-                    -- use rule "Transform.ag"(line 913, column 55)
+                    -- use rule "Transform.ag"(line 923, column 55)
                     _lhsOdefinedInsts =
                         _patIdefinedInsts
                     -- self rule
@@ -3350,16 +3360,16 @@
                     _patsIdefinedAttrs :: ([AttrName])
                     _patsIdefinedInsts :: ([Identifier])
                     _patsIpatunder :: ([AttrName]->Patterns)
-                    -- "Transform.ag"(line 924, column 13)
+                    -- "Transform.ag"(line 934, column 13)
                     _lhsOpatunder =
                         \us -> Product pos_ (_patsIpatunder us)
-                    -- "Transform.ag"(line 935, column 16)
+                    -- "Transform.ag"(line 945, column 16)
                     _lhsOstpos =
                         pos_
-                    -- use rule "Transform.ag"(line 914, column 42)
+                    -- use rule "Transform.ag"(line 924, column 42)
                     _lhsOdefinedAttrs =
                         _patsIdefinedAttrs
-                    -- use rule "Transform.ag"(line 913, column 55)
+                    -- use rule "Transform.ag"(line 923, column 55)
                     _lhsOdefinedInsts =
                         _patsIdefinedInsts
                     -- self rule
@@ -3379,16 +3389,16 @@
                     _lhsOdefinedAttrs :: ([AttrName])
                     _lhsOdefinedInsts :: ([Identifier])
                     _lhsOcopy :: Pattern
-                    -- "Transform.ag"(line 922, column 16)
+                    -- "Transform.ag"(line 932, column 16)
                     _lhsOpatunder =
                         \us -> _copy
-                    -- "Transform.ag"(line 937, column 16)
+                    -- "Transform.ag"(line 947, column 16)
                     _lhsOstpos =
                         pos_
-                    -- use rule "Transform.ag"(line 914, column 42)
+                    -- use rule "Transform.ag"(line 924, column 42)
                     _lhsOdefinedAttrs =
                         []
-                    -- use rule "Transform.ag"(line 913, column 55)
+                    -- use rule "Transform.ag"(line 923, column 55)
                     _lhsOdefinedInsts =
                         []
                     -- self rule
@@ -3449,13 +3459,13 @@
                      _tlIdefinedAttrs :: ([AttrName])
                      _tlIdefinedInsts :: ([Identifier])
                      _tlIpatunder :: ([AttrName]->Patterns)
-                     -- "Transform.ag"(line 929, column 10)
+                     -- "Transform.ag"(line 939, column 10)
                      _lhsOpatunder =
                          \us -> (_hdIpatunder us) : (_tlIpatunder us)
-                     -- use rule "Transform.ag"(line 914, column 42)
+                     -- use rule "Transform.ag"(line 924, column 42)
                      _lhsOdefinedAttrs =
                          _hdIdefinedAttrs ++ _tlIdefinedAttrs
-                     -- use rule "Transform.ag"(line 913, column 55)
+                     -- use rule "Transform.ag"(line 923, column 55)
                      _lhsOdefinedInsts =
                          _hdIdefinedInsts ++ _tlIdefinedInsts
                      -- self rule
@@ -3475,13 +3485,13 @@
                      _lhsOdefinedAttrs :: ([AttrName])
                      _lhsOdefinedInsts :: ([Identifier])
                      _lhsOcopy :: Patterns
-                     -- "Transform.ag"(line 928, column 9)
+                     -- "Transform.ag"(line 938, column 9)
                      _lhsOpatunder =
                          \us ->  []
-                     -- use rule "Transform.ag"(line 914, column 42)
+                     -- use rule "Transform.ag"(line 924, column 42)
                      _lhsOdefinedAttrs =
                          []
-                     -- use rule "Transform.ag"(line 913, column 55)
+                     -- use rule "Transform.ag"(line 923, column 55)
                      _lhsOdefinedInsts =
                          []
                      -- self rule
@@ -3562,25 +3572,25 @@
                         _rulesIruleInfos :: ([RuleInfo])
                         _rulesIsigInfos :: ([SigInfo])
                         _rulesIuniqueInfos :: ([UniqueInfo])
-                        -- "Transform.ag"(line 678, column 7)
+                        -- "Transform.ag"(line 688, column 7)
                         _pragmaNames =
                             Set.fromList _rulesIpragmaNamesCollect
-                        -- "Transform.ag"(line 679, column 7)
+                        -- "Transform.ag"(line 689, column 7)
                         _lhsOsemPragmasCollect =
                             foldr pragmaMapUnion Map.empty [ pragmaMapSingle nt con _pragmaNames
                                                            | (nt, conset, _) <- _coninfo
                                                            , con <- Set.toList conset
                                                            ]
-                        -- "Transform.ag"(line 707, column 7)
+                        -- "Transform.ag"(line 717, column 7)
                         _attrOrders =
                             [ orderMapSingle nt con _rulesIorderDepsCollect
                             | (nt, conset, _) <- _coninfo
                             , con <- Set.toList conset
                             ]
-                        -- "Transform.ag"(line 713, column 7)
+                        -- "Transform.ag"(line 723, column 7)
                         _lhsOattrOrderCollect =
                             foldr orderMapUnion Map.empty _attrOrders
-                        -- "Transform.ag"(line 857, column 12)
+                        -- "Transform.ag"(line 867, column 12)
                         _coninfo =
                             [ (nt, conset, conkeys)
                             | nt  <- Set.toList _lhsInts
@@ -3588,40 +3598,40 @@
                             , let conkeys = Set.fromList (Map.keys conmap)
                             , let conset  = _constructorSetIconstructors conkeys
                             ]
-                        -- "Transform.ag"(line 864, column 12)
+                        -- "Transform.ag"(line 874, column 12)
                         _lhsOerrors =
                             Seq.fromList
                                [ UndefAlt nt con
                                | (nt, conset, conkeys) <- _coninfo
                                , con <- Set.toList (Set.difference conset conkeys)
                                ]
-                        -- "Transform.ag"(line 869, column 12)
+                        -- "Transform.ag"(line 879, column 12)
                         _lhsOcollectedRules =
                             [ (nt,con,r)
                             | (nt, conset, _) <- _coninfo
                             , con <- Set.toList conset
                             , r <- _rulesIruleInfos
                             ]
-                        -- "Transform.ag"(line 875, column 12)
+                        -- "Transform.ag"(line 885, column 12)
                         _lhsOcollectedSigs =
                             [ (nt,con,ts)
                             | (nt, conset, _) <- _coninfo
                             , con <- Set.toList conset
                             , ts <- _rulesIsigInfos
                             ]
-                        -- "Transform.ag"(line 882, column 12)
+                        -- "Transform.ag"(line 892, column 12)
                         _lhsOcollectedInsts =
                             [ (nt,con,_rulesIdefinedInsts)
                             | (nt, conset, _) <- _coninfo
                             , con <- Set.toList conset
                             ]
-                        -- "Transform.ag"(line 888, column 12)
+                        -- "Transform.ag"(line 898, column 12)
                         _lhsOcollectedUniques =
                             [ (nt,con,_rulesIuniqueInfos)
                             | (nt, conset, _) <- _coninfo
                             , con <- Set.toList conset
                             ]
-                        -- "Transform.ag"(line 894, column 12)
+                        -- "Transform.ag"(line 904, column 12)
                         _lhsOcollectedAugments =
                             [ (nt, con, _rulesIaugmentInfos)
                             | (nt, conset, _) <- _coninfo
@@ -3710,7 +3720,7 @@
                          _tlIcollectedUniques :: ([ (NontermIdent, ConstructorIdent, [UniqueInfo]) ])
                          _tlIerrors :: (Seq Error)
                          _tlIsemPragmasCollect :: PragmaMap
-                         -- use rule "Transform.ag"(line 702, column 55)
+                         -- use rule "Transform.ag"(line 712, column 55)
                          _lhsOattrOrderCollect =
                              _hdIattrOrderCollect `orderMapUnion` _tlIattrOrderCollect
                          -- use rule "Transform.ag"(line 150, column 32)
@@ -3731,7 +3741,7 @@
                          -- use rule "Transform.ag"(line 42, column 19)
                          _lhsOerrors =
                              _hdIerrors Seq.>< _tlIerrors
-                         -- use rule "Transform.ag"(line 674, column 56)
+                         -- use rule "Transform.ag"(line 684, column 56)
                          _lhsOsemPragmasCollect =
                              _hdIsemPragmasCollect `pragmaMapUnion` _tlIsemPragmasCollect
                          -- copy rule (down)
@@ -3770,7 +3780,7 @@
                          _lhsOcollectedUniques :: ([ (NontermIdent, ConstructorIdent, [UniqueInfo]) ])
                          _lhsOerrors :: (Seq Error)
                          _lhsOsemPragmasCollect :: PragmaMap
-                         -- use rule "Transform.ag"(line 702, column 55)
+                         -- use rule "Transform.ag"(line 712, column 55)
                          _lhsOattrOrderCollect =
                              Map.empty
                          -- use rule "Transform.ag"(line 150, column 32)
@@ -3791,7 +3801,7 @@
                          -- use rule "Transform.ag"(line 42, column 19)
                          _lhsOerrors =
                              Seq.empty
-                         -- use rule "Transform.ag"(line 674, column 56)
+                         -- use rule "Transform.ag"(line 684, column 56)
                          _lhsOsemPragmasCollect =
                              Map.empty
                      in  ( _lhsOattrOrderCollect,_lhsOcollectedAugments,_lhsOcollectedInsts,_lhsOcollectedRules,_lhsOcollectedSigs,_lhsOcollectedUniques,_lhsOerrors,_lhsOsemPragmasCollect))) )
@@ -3865,28 +3875,28 @@
                    _lhsOruleInfos :: ([RuleInfo])
                    _lhsOsigInfos :: ([SigInfo])
                    _lhsOuniqueInfos :: ([UniqueInfo])
-                   -- "Transform.ag"(line 719, column 7)
+                   -- "Transform.ag"(line 729, column 7)
                    _dependency =
                        [ Dependency b a | b <- before_, a <- after_ ]
-                   -- "Transform.ag"(line 720, column 7)
+                   -- "Transform.ag"(line 730, column 7)
                    _lhsOorderDepsCollect =
                        Set.fromList _dependency
-                   -- use rule "Transform.ag"(line 852, column 40)
+                   -- use rule "Transform.ag"(line 862, column 40)
                    _lhsOaugmentInfos =
                        []
-                   -- use rule "Transform.ag"(line 913, column 55)
+                   -- use rule "Transform.ag"(line 923, column 55)
                    _lhsOdefinedInsts =
                        []
-                   -- use rule "Transform.ag"(line 684, column 46)
+                   -- use rule "Transform.ag"(line 694, column 46)
                    _lhsOpragmaNamesCollect =
                        []
-                   -- use rule "Transform.ag"(line 849, column 40)
+                   -- use rule "Transform.ag"(line 859, column 40)
                    _lhsOruleInfos =
                        []
-                   -- use rule "Transform.ag"(line 850, column 40)
+                   -- use rule "Transform.ag"(line 860, column 40)
                    _lhsOsigInfos =
                        []
-                   -- use rule "Transform.ag"(line 851, column 40)
+                   -- use rule "Transform.ag"(line 861, column 40)
                    _lhsOuniqueInfos =
                        []
                in  ( _lhsOaugmentInfos,_lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos,_lhsOuniqueInfos)) )
@@ -3901,25 +3911,25 @@
                    _lhsOruleInfos :: ([RuleInfo])
                    _lhsOsigInfos :: ([SigInfo])
                    _lhsOuniqueInfos :: ([UniqueInfo])
-                   -- "Transform.ag"(line 910, column 17)
+                   -- "Transform.ag"(line 920, column 17)
                    _lhsOaugmentInfos =
                        [ (ident_, rhs_) ]
-                   -- use rule "Transform.ag"(line 913, column 55)
+                   -- use rule "Transform.ag"(line 923, column 55)
                    _lhsOdefinedInsts =
                        []
-                   -- use rule "Transform.ag"(line 715, column 44)
+                   -- use rule "Transform.ag"(line 725, column 44)
                    _lhsOorderDepsCollect =
                        Set.empty
-                   -- use rule "Transform.ag"(line 684, column 46)
+                   -- use rule "Transform.ag"(line 694, column 46)
                    _lhsOpragmaNamesCollect =
                        []
-                   -- use rule "Transform.ag"(line 849, column 40)
+                   -- use rule "Transform.ag"(line 859, column 40)
                    _lhsOruleInfos =
                        []
-                   -- use rule "Transform.ag"(line 850, column 40)
+                   -- use rule "Transform.ag"(line 860, column 40)
                    _lhsOsigInfos =
                        []
-                   -- use rule "Transform.ag"(line 851, column 40)
+                   -- use rule "Transform.ag"(line 861, column 40)
                    _lhsOuniqueInfos =
                        []
                in  ( _lhsOaugmentInfos,_lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos,_lhsOuniqueInfos)) )
@@ -3940,25 +3950,25 @@
                    _patternIdefinedInsts :: ([Identifier])
                    _patternIpatunder :: ([AttrName]->Pattern)
                    _patternIstpos :: Pos
-                   -- "Transform.ag"(line 901, column 10)
+                   -- "Transform.ag"(line 911, column 10)
                    _lhsOruleInfos =
                        [ (_patternIpatunder, rhs_, _patternIdefinedAttrs, owrt_, show _patternIstpos) ]
-                   -- use rule "Transform.ag"(line 852, column 40)
+                   -- use rule "Transform.ag"(line 862, column 40)
                    _lhsOaugmentInfos =
                        []
-                   -- use rule "Transform.ag"(line 913, column 55)
+                   -- use rule "Transform.ag"(line 923, column 55)
                    _lhsOdefinedInsts =
                        _patternIdefinedInsts
-                   -- use rule "Transform.ag"(line 715, column 44)
+                   -- use rule "Transform.ag"(line 725, column 44)
                    _lhsOorderDepsCollect =
                        Set.empty
-                   -- use rule "Transform.ag"(line 684, column 46)
+                   -- use rule "Transform.ag"(line 694, column 46)
                    _lhsOpragmaNamesCollect =
                        []
-                   -- use rule "Transform.ag"(line 850, column 40)
+                   -- use rule "Transform.ag"(line 860, column 40)
                    _lhsOsigInfos =
                        []
-                   -- use rule "Transform.ag"(line 851, column 40)
+                   -- use rule "Transform.ag"(line 861, column 40)
                    _lhsOuniqueInfos =
                        []
                    ( _patternIcopy,_patternIdefinedAttrs,_patternIdefinedInsts,_patternIpatunder,_patternIstpos) =
@@ -3974,25 +3984,25 @@
                    _lhsOruleInfos :: ([RuleInfo])
                    _lhsOsigInfos :: ([SigInfo])
                    _lhsOuniqueInfos :: ([UniqueInfo])
-                   -- "Transform.ag"(line 688, column 7)
+                   -- "Transform.ag"(line 698, column 7)
                    _lhsOpragmaNamesCollect =
                        names_
-                   -- use rule "Transform.ag"(line 852, column 40)
+                   -- use rule "Transform.ag"(line 862, column 40)
                    _lhsOaugmentInfos =
                        []
-                   -- use rule "Transform.ag"(line 913, column 55)
+                   -- use rule "Transform.ag"(line 923, column 55)
                    _lhsOdefinedInsts =
                        []
-                   -- use rule "Transform.ag"(line 715, column 44)
+                   -- use rule "Transform.ag"(line 725, column 44)
                    _lhsOorderDepsCollect =
                        Set.empty
-                   -- use rule "Transform.ag"(line 849, column 40)
+                   -- use rule "Transform.ag"(line 859, column 40)
                    _lhsOruleInfos =
                        []
-                   -- use rule "Transform.ag"(line 850, column 40)
+                   -- use rule "Transform.ag"(line 860, column 40)
                    _lhsOsigInfos =
                        []
-                   -- use rule "Transform.ag"(line 851, column 40)
+                   -- use rule "Transform.ag"(line 861, column 40)
                    _lhsOuniqueInfos =
                        []
                in  ( _lhsOaugmentInfos,_lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos,_lhsOuniqueInfos)) )
@@ -4007,25 +4017,25 @@
                    _lhsOpragmaNamesCollect :: ([Identifier])
                    _lhsOruleInfos :: ([RuleInfo])
                    _lhsOuniqueInfos :: ([UniqueInfo])
-                   -- "Transform.ag"(line 904, column 14)
+                   -- "Transform.ag"(line 914, column 14)
                    _lhsOsigInfos =
                        [ (ident_, tp_) ]
-                   -- use rule "Transform.ag"(line 852, column 40)
+                   -- use rule "Transform.ag"(line 862, column 40)
                    _lhsOaugmentInfos =
                        []
-                   -- use rule "Transform.ag"(line 913, column 55)
+                   -- use rule "Transform.ag"(line 923, column 55)
                    _lhsOdefinedInsts =
                        []
-                   -- use rule "Transform.ag"(line 715, column 44)
+                   -- use rule "Transform.ag"(line 725, column 44)
                    _lhsOorderDepsCollect =
                        Set.empty
-                   -- use rule "Transform.ag"(line 684, column 46)
+                   -- use rule "Transform.ag"(line 694, column 46)
                    _lhsOpragmaNamesCollect =
                        []
-                   -- use rule "Transform.ag"(line 849, column 40)
+                   -- use rule "Transform.ag"(line 859, column 40)
                    _lhsOruleInfos =
                        []
-                   -- use rule "Transform.ag"(line 851, column 40)
+                   -- use rule "Transform.ag"(line 861, column 40)
                    _lhsOuniqueInfos =
                        []
                in  ( _lhsOaugmentInfos,_lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos,_lhsOuniqueInfos)) )
@@ -4040,25 +4050,25 @@
                    _lhsOpragmaNamesCollect :: ([Identifier])
                    _lhsOruleInfos :: ([RuleInfo])
                    _lhsOsigInfos :: ([SigInfo])
-                   -- "Transform.ag"(line 907, column 16)
+                   -- "Transform.ag"(line 917, column 16)
                    _lhsOuniqueInfos =
                        [ (ident_, ref_) ]
-                   -- use rule "Transform.ag"(line 852, column 40)
+                   -- use rule "Transform.ag"(line 862, column 40)
                    _lhsOaugmentInfos =
                        []
-                   -- use rule "Transform.ag"(line 913, column 55)
+                   -- use rule "Transform.ag"(line 923, column 55)
                    _lhsOdefinedInsts =
                        []
-                   -- use rule "Transform.ag"(line 715, column 44)
+                   -- use rule "Transform.ag"(line 725, column 44)
                    _lhsOorderDepsCollect =
                        Set.empty
-                   -- use rule "Transform.ag"(line 684, column 46)
+                   -- use rule "Transform.ag"(line 694, column 46)
                    _lhsOpragmaNamesCollect =
                        []
-                   -- use rule "Transform.ag"(line 849, column 40)
+                   -- use rule "Transform.ag"(line 859, column 40)
                    _lhsOruleInfos =
                        []
-                   -- use rule "Transform.ag"(line 850, column 40)
+                   -- use rule "Transform.ag"(line 860, column 40)
                    _lhsOsigInfos =
                        []
                in  ( _lhsOaugmentInfos,_lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos,_lhsOuniqueInfos)) )
@@ -4120,25 +4130,25 @@
                     _tlIruleInfos :: ([RuleInfo])
                     _tlIsigInfos :: ([SigInfo])
                     _tlIuniqueInfos :: ([UniqueInfo])
-                    -- use rule "Transform.ag"(line 852, column 40)
+                    -- use rule "Transform.ag"(line 862, column 40)
                     _lhsOaugmentInfos =
                         _hdIaugmentInfos ++ _tlIaugmentInfos
-                    -- use rule "Transform.ag"(line 913, column 55)
+                    -- use rule "Transform.ag"(line 923, column 55)
                     _lhsOdefinedInsts =
                         _hdIdefinedInsts ++ _tlIdefinedInsts
-                    -- use rule "Transform.ag"(line 715, column 44)
+                    -- use rule "Transform.ag"(line 725, column 44)
                     _lhsOorderDepsCollect =
                         _hdIorderDepsCollect `Set.union` _tlIorderDepsCollect
-                    -- use rule "Transform.ag"(line 684, column 46)
+                    -- use rule "Transform.ag"(line 694, column 46)
                     _lhsOpragmaNamesCollect =
                         _hdIpragmaNamesCollect ++ _tlIpragmaNamesCollect
-                    -- use rule "Transform.ag"(line 849, column 40)
+                    -- use rule "Transform.ag"(line 859, column 40)
                     _lhsOruleInfos =
                         _hdIruleInfos ++ _tlIruleInfos
-                    -- use rule "Transform.ag"(line 850, column 40)
+                    -- use rule "Transform.ag"(line 860, column 40)
                     _lhsOsigInfos =
                         _hdIsigInfos ++ _tlIsigInfos
-                    -- use rule "Transform.ag"(line 851, column 40)
+                    -- use rule "Transform.ag"(line 861, column 40)
                     _lhsOuniqueInfos =
                         _hdIuniqueInfos ++ _tlIuniqueInfos
                     ( _hdIaugmentInfos,_hdIdefinedInsts,_hdIorderDepsCollect,_hdIpragmaNamesCollect,_hdIruleInfos,_hdIsigInfos,_hdIuniqueInfos) =
@@ -4155,25 +4165,25 @@
                     _lhsOruleInfos :: ([RuleInfo])
                     _lhsOsigInfos :: ([SigInfo])
                     _lhsOuniqueInfos :: ([UniqueInfo])
-                    -- use rule "Transform.ag"(line 852, column 40)
+                    -- use rule "Transform.ag"(line 862, column 40)
                     _lhsOaugmentInfos =
                         []
-                    -- use rule "Transform.ag"(line 913, column 55)
+                    -- use rule "Transform.ag"(line 923, column 55)
                     _lhsOdefinedInsts =
                         []
-                    -- use rule "Transform.ag"(line 715, column 44)
+                    -- use rule "Transform.ag"(line 725, column 44)
                     _lhsOorderDepsCollect =
                         Set.empty
-                    -- use rule "Transform.ag"(line 684, column 46)
+                    -- use rule "Transform.ag"(line 694, column 46)
                     _lhsOpragmaNamesCollect =
                         []
-                    -- use rule "Transform.ag"(line 849, column 40)
+                    -- use rule "Transform.ag"(line 859, column 40)
                     _lhsOruleInfos =
                         []
-                    -- use rule "Transform.ag"(line 850, column 40)
+                    -- use rule "Transform.ag"(line 860, column 40)
                     _lhsOsigInfos =
                         []
-                    -- use rule "Transform.ag"(line 851, column 40)
+                    -- use rule "Transform.ag"(line 861, column 40)
                     _lhsOuniqueInfos =
                         []
                 in  ( _lhsOaugmentInfos,_lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos,_lhsOuniqueInfos)) )
diff --git a/src/Version.hs b/src/Version.hs
--- a/src/Version.hs
+++ b/src/Version.hs
@@ -1,4 +1,4 @@
 module Version where
 
 banner :: String
-banner = "Attribute Grammar compiler / HUT project. Version 0.9.17"
+banner = "Attribute Grammar compiler / HUT project. Version 0.9.18"
diff --git a/uuagc.cabal b/uuagc.cabal
--- a/uuagc.cabal
+++ b/uuagc.cabal
@@ -1,7 +1,7 @@
 cabal-version: >=1.2
 build-type: Simple
 name: uuagc
-version: 0.9.17
+version: 0.9.18
 license: GPL
 license-file: LICENSE
 maintainer: Arie Middelkoop <ariem@cs.uu.nl>
diff --git a/uuagc.cabal-for-ghc-6.6 b/uuagc.cabal-for-ghc-6.6
--- a/uuagc.cabal-for-ghc-6.6
+++ b/uuagc.cabal-for-ghc-6.6
@@ -1,5 +1,5 @@
 name: uuagc
-version: 0.9.17
+version: 0.9.18
 license: GPL
 license-file: LICENSE
 maintainer: Arie Middelkoop <ariem@cs.uu.nl>
