packages feed

uuagc (empty) → 0.9.5

raw patch · 41 files changed

+26582/−0 lines, 41 filesdep +arraydep +basedep +containerssetup-changed

Dependencies added: array, base, containers, directory, haskell98, uulib

Files

+ LICENSE view
@@ -0,0 +1,482 @@+		  GNU LIBRARY GENERAL PUBLIC LICENSE+		       Version 2, June 1991++ Copyright (C) 1991 Free Software Foundation, Inc.+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA+ Everyone is permitted to copy and distribute verbatim copies+ of this license document, but changing it is not allowed.++[This is the first released version of the library GPL.  It is+ numbered 2 because it goes with version 2 of the ordinary GPL.]++			    Preamble++  The licenses for most software are designed to take away your+freedom to share and change it.  By contrast, the GNU General Public+Licenses are intended to guarantee your freedom to share and change+free software--to make sure the software is free for all its users.++  This license, the Library General Public License, applies to some+specially designated Free Software Foundation software, and to any+other libraries whose authors decide to use it.  You can use it for+your libraries, too.++  When we speak of free software, we are referring to freedom, not+price.  Our General Public Licenses are designed to make sure that you+have the freedom to distribute copies of free software (and charge for+this service if you wish), that you receive source code or can get it+if you want it, that you can change the software or use pieces of it+in new free programs; and that you know you can do these things.++  To protect your rights, we need to make restrictions that forbid+anyone to deny you these rights or to ask you to surrender the rights.+These restrictions translate to certain responsibilities for you if+you distribute copies of the library, or if you modify it.++  For example, if you distribute copies of the library, whether gratis+or for a fee, you must give the recipients all the rights that we gave+you.  You must make sure that they, too, receive or can get the source+code.  If you link a program with the library, you must provide+complete object files to the recipients so that they can relink them+with the library, after making changes to the library and recompiling+it.  And you must show them these terms so they know their rights.++  Our method of protecting your rights has two steps: (1) copyright+the library, and (2) offer you this license which gives you legal+permission to copy, distribute and/or modify the library.++  Also, for each distributor's protection, we want to make certain+that everyone understands that there is no warranty for this free+library.  If the library is modified by someone else and passed on, we+want its recipients to know that what they have is not the original+version, so that any problems introduced by others will not reflect on+the original authors' reputations.++  Finally, any free program is threatened constantly by software+patents.  We wish to avoid the danger that companies distributing free+software will individually obtain patent licenses, thus in effect+transforming the program into proprietary software.  To prevent this,+we have made it clear that any patent must be licensed for everyone's+free use or not licensed at all.++  Most GNU software, including some libraries, is covered by the ordinary+GNU General Public License, which was designed for utility programs.  This+license, the GNU Library General Public License, applies to certain+designated libraries.  This license is quite different from the ordinary+one; be sure to read it in full, and don't assume that anything in it is+the same as in the ordinary license.++  The reason we have a separate public license for some libraries is that+they blur the distinction we usually make between modifying or adding to a+program and simply using it.  Linking a program with a library, without+changing the library, is in some sense simply using the library, and is+analogous to running a utility program or application program.  However, in+a textual and legal sense, the linked executable is a combined work, a+derivative of the original library, and the ordinary General Public License+treats it as such.++  Because of this blurred distinction, using the ordinary General+Public License for libraries did not effectively promote software+sharing, because most developers did not use the libraries.  We+concluded that weaker conditions might promote sharing better.++  However, unrestricted linking of non-free programs would deprive the+users of those programs of all benefit from the free status of the+libraries themselves.  This Library General Public License is intended to+permit developers of non-free programs to use free libraries, while+preserving your freedom as a user of such programs to change the free+libraries that are incorporated in them.  (We have not seen how to achieve+this as regards changes in header files, but we have achieved it as regards+changes in the actual functions of the Library.)  The hope is that this+will lead to faster development of free libraries.++  The precise terms and conditions for copying, distribution and+modification follow.  Pay close attention to the difference between a+"work based on the library" and a "work that uses the library".  The+former contains code derived from the library, while the latter only+works together with the library.++  Note that it is possible for a library to be covered by the ordinary+General Public License rather than by this special one.++		  GNU LIBRARY GENERAL PUBLIC LICENSE+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION++  0. This License Agreement applies to any software library which+contains a notice placed by the copyright holder or other authorized+party saying it may be distributed under the terms of this Library+General Public License (also called "this License").  Each licensee is+addressed as "you".++  A "library" means a collection of software functions and/or data+prepared so as to be conveniently linked with application programs+(which use some of those functions and data) to form executables.++  The "Library", below, refers to any such software library or work+which has been distributed under these terms.  A "work based on the+Library" means either the Library or any derivative work under+copyright law: that is to say, a work containing the Library or a+portion of it, either verbatim or with modifications and/or translated+straightforwardly into another language.  (Hereinafter, translation is+included without limitation in the term "modification".)++  "Source code" for a work means the preferred form of the work for+making modifications to it.  For a library, complete source code means+all the source code for all modules it contains, plus any associated+interface definition files, plus the scripts used to control compilation+and installation of the library.++  Activities other than copying, distribution and modification are not+covered by this License; they are outside its scope.  The act of+running a program using the Library is not restricted, and output from+such a program is covered only if its contents constitute a work based+on the Library (independent of the use of the Library in a tool for+writing it).  Whether that is true depends on what the Library does+and what the program that uses the Library does.+  +  1. You may copy and distribute verbatim copies of the Library's+complete source code as you receive it, in any medium, provided that+you conspicuously and appropriately publish on each copy an+appropriate copyright notice and disclaimer of warranty; keep intact+all the notices that refer to this License and to the absence of any+warranty; and distribute a copy of this License along with the+Library.++  You may charge a fee for the physical act of transferring a copy,+and you may at your option offer warranty protection in exchange for a+fee.++  2. You may modify your copy or copies of the Library or any portion+of it, thus forming a work based on the Library, and copy and+distribute such modifications or work under the terms of Section 1+above, provided that you also meet all of these conditions:++    a) The modified work must itself be a software library.++    b) You must cause the files modified to carry prominent notices+    stating that you changed the files and the date of any change.++    c) You must cause the whole of the work to be licensed at no+    charge to all third parties under the terms of this License.++    d) If a facility in the modified Library refers to a function or a+    table of data to be supplied by an application program that uses+    the facility, other than as an argument passed when the facility+    is invoked, then you must make a good faith effort to ensure that,+    in the event an application does not supply such function or+    table, the facility still operates, and performs whatever part of+    its purpose remains meaningful.++    (For example, a function in a library to compute square roots has+    a purpose that is entirely well-defined independent of the+    application.  Therefore, Subsection 2d requires that any+    application-supplied function or table used by this function must+    be optional: if the application does not supply it, the square+    root function must still compute square roots.)++These requirements apply to the modified work as a whole.  If+identifiable sections of that work are not derived from the Library,+and can be reasonably considered independent and separate works in+themselves, then this License, and its terms, do not apply to those+sections when you distribute them as separate works.  But when you+distribute the same sections as part of a whole which is a work based+on the Library, the distribution of the whole must be on the terms of+this License, whose permissions for other licensees extend to the+entire whole, and thus to each and every part regardless of who wrote+it.++Thus, it is not the intent of this section to claim rights or contest+your rights to work written entirely by you; rather, the intent is to+exercise the right to control the distribution of derivative or+collective works based on the Library.++In addition, mere aggregation of another work not based on the Library+with the Library (or with a work based on the Library) on a volume of+a storage or distribution medium does not bring the other work under+the scope of this License.++  3. You may opt to apply the terms of the ordinary GNU General Public+License instead of this License to a given copy of the Library.  To do+this, you must alter all the notices that refer to this License, so+that they refer to the ordinary GNU General Public License, version 2,+instead of to this License.  (If a newer version than version 2 of the+ordinary GNU General Public License has appeared, then you can specify+that version instead if you wish.)  Do not make any other change in+these notices.++  Once this change is made in a given copy, it is irreversible for+that copy, so the ordinary GNU General Public License applies to all+subsequent copies and derivative works made from that copy.++  This option is useful when you wish to copy part of the code of+the Library into a program that is not a library.++  4. You may copy and distribute the Library (or a portion or+derivative of it, under Section 2) in object code or executable form+under the terms of Sections 1 and 2 above provided that you accompany+it with the complete corresponding machine-readable source code, which+must be distributed under the terms of Sections 1 and 2 above on a+medium customarily used for software interchange.++  If distribution of object code is made by offering access to copy+from a designated place, then offering equivalent access to copy the+source code from the same place satisfies the requirement to+distribute the source code, even though third parties are not+compelled to copy the source along with the object code.++  5. A program that contains no derivative of any portion of the+Library, but is designed to work with the Library by being compiled or+linked with it, is called a "work that uses the Library".  Such a+work, in isolation, is not a derivative work of the Library, and+therefore falls outside the scope of this License.++  However, linking a "work that uses the Library" with the Library+creates an executable that is a derivative of the Library (because it+contains portions of the Library), rather than a "work that uses the+library".  The executable is therefore covered by this License.+Section 6 states terms for distribution of such executables.++  When a "work that uses the Library" uses material from a header file+that is part of the Library, the object code for the work may be a+derivative work of the Library even though the source code is not.+Whether this is true is especially significant if the work can be+linked without the Library, or if the work is itself a library.  The+threshold for this to be true is not precisely defined by law.++  If such an object file uses only numerical parameters, data+structure layouts and accessors, and small macros and small inline+functions (ten lines or less in length), then the use of the object+file is unrestricted, regardless of whether it is legally a derivative+work.  (Executables containing this object code plus portions of the+Library will still fall under Section 6.)++  Otherwise, if the work is a derivative of the Library, you may+distribute the object code for the work under the terms of Section 6.+Any executables containing that work also fall under Section 6,+whether or not they are linked directly with the Library itself.++  6. As an exception to the Sections above, you may also compile or+link a "work that uses the Library" with the Library to produce a+work containing portions of the Library, and distribute that work+under terms of your choice, provided that the terms permit+modification of the work for the customer's own use and reverse+engineering for debugging such modifications.++  You must give prominent notice with each copy of the work that the+Library is used in it and that the Library and its use are covered by+this License.  You must supply a copy of this License.  If the work+during execution displays copyright notices, you must include the+copyright notice for the Library among them, as well as a reference+directing the user to the copy of this License.  Also, you must do one+of these things:++    a) Accompany the work with the complete corresponding+    machine-readable source code for the Library including whatever+    changes were used in the work (which must be distributed under+    Sections 1 and 2 above); and, if the work is an executable linked+    with the Library, with the complete machine-readable "work that+    uses the Library", as object code and/or source code, so that the+    user can modify the Library and then relink to produce a modified+    executable containing the modified Library.  (It is understood+    that the user who changes the contents of definitions files in the+    Library will not necessarily be able to recompile the application+    to use the modified definitions.)++    b) Accompany the work with a written offer, valid for at+    least three years, to give the same user the materials+    specified in Subsection 6a, above, for a charge no more+    than the cost of performing this distribution.++    c) If distribution of the work is made by offering access to copy+    from a designated place, offer equivalent access to copy the above+    specified materials from the same place.++    d) Verify that the user has already received a copy of these+    materials or that you have already sent this user a copy.++  For an executable, the required form of the "work that uses the+Library" must include any data and utility programs needed for+reproducing the executable from it.  However, as a special exception,+the source code distributed need not include anything that is normally+distributed (in either source or binary form) with the major+components (compiler, kernel, and so on) of the operating system on+which the executable runs, unless that component itself accompanies+the executable.++  It may happen that this requirement contradicts the license+restrictions of other proprietary libraries that do not normally+accompany the operating system.  Such a contradiction means you cannot+use both them and the Library together in an executable that you+distribute.++  7. You may place library facilities that are a work based on the+Library side-by-side in a single library together with other library+facilities not covered by this License, and distribute such a combined+library, provided that the separate distribution of the work based on+the Library and of the other library facilities is otherwise+permitted, and provided that you do these two things:++    a) Accompany the combined library with a copy of the same work+    based on the Library, uncombined with any other library+    facilities.  This must be distributed under the terms of the+    Sections above.++    b) Give prominent notice with the combined library of the fact+    that part of it is a work based on the Library, and explaining+    where to find the accompanying uncombined form of the same work.++  8. You may not copy, modify, sublicense, link with, or distribute+the Library except as expressly provided under this License.  Any+attempt otherwise to copy, modify, sublicense, link with, or+distribute the Library is void, and will automatically terminate your+rights under this License.  However, parties who have received copies,+or rights, from you under this License will not have their licenses+terminated so long as such parties remain in full compliance.++  9. You are not required to accept this License, since you have not+signed it.  However, nothing else grants you permission to modify or+distribute the Library or its derivative works.  These actions are+prohibited by law if you do not accept this License.  Therefore, by+modifying or distributing the Library (or any work based on the+Library), you indicate your acceptance of this License to do so, and+all its terms and conditions for copying, distributing or modifying+the Library or works based on it.++  10. Each time you redistribute the Library (or any work based on the+Library), the recipient automatically receives a license from the+original licensor to copy, distribute, link with or modify the Library+subject to these terms and conditions.  You may not impose any further+restrictions on the recipients' exercise of the rights granted herein.+You are not responsible for enforcing compliance by third parties to+this License.++  11. If, as a consequence of a court judgment or allegation of patent+infringement or for any other reason (not limited to patent issues),+conditions are imposed on you (whether by court order, agreement or+otherwise) that contradict the conditions of this License, they do not+excuse you from the conditions of this License.  If you cannot+distribute so as to satisfy simultaneously your obligations under this+License and any other pertinent obligations, then as a consequence you+may not distribute the Library at all.  For example, if a patent+license would not permit royalty-free redistribution of the Library by+all those who receive copies directly or indirectly through you, then+the only way you could satisfy both it and this License would be to+refrain entirely from distribution of the Library.++If any portion of this section is held invalid or unenforceable under any+particular circumstance, the balance of the section is intended to apply,+and the section as a whole is intended to apply in other circumstances.++It is not the purpose of this section to induce you to infringe any+patents or other property right claims or to contest validity of any+such claims; this section has the sole purpose of protecting the+integrity of the free software distribution system which is+implemented by public license practices.  Many people have made+generous contributions to the wide range of software distributed+through that system in reliance on consistent application of that+system; it is up to the author/donor to decide if he or she is willing+to distribute software through any other system and a licensee cannot+impose that choice.++This section is intended to make thoroughly clear what is believed to+be a consequence of the rest of this License.++  12. If the distribution and/or use of the Library is restricted in+certain countries either by patents or by copyrighted interfaces, the+original copyright holder who places the Library under this License may add+an explicit geographical distribution limitation excluding those countries,+so that distribution is permitted only in or among countries not thus+excluded.  In such case, this License incorporates the limitation as if+written in the body of this License.++  13. The Free Software Foundation may publish revised and/or new+versions of the Library General Public License from time to time.+Such new versions will be similar in spirit to the present version,+but may differ in detail to address new problems or concerns.++Each version is given a distinguishing version number.  If the Library+specifies a version number of this License which applies to it and+"any later version", you have the option of following the terms and+conditions either of that version or of any later version published by+the Free Software Foundation.  If the Library does not specify a+license version number, you may choose any version ever published by+the Free Software Foundation.++  14. If you wish to incorporate parts of the Library into other free+programs whose distribution conditions are incompatible with these,+write to the author to ask for permission.  For software which is+copyrighted by the Free Software Foundation, write to the Free+Software Foundation; we sometimes make exceptions for this.  Our+decision will be guided by the two goals of preserving the free status+of all derivatives of our free software and of promoting the sharing+and reuse of software generally.++			    NO WARRANTY++  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.++  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH+DAMAGES.++		     END OF TERMS AND CONDITIONS++     Appendix: How to Apply These Terms to Your New Libraries++  If you develop a new library, and you want it to be of the greatest+possible use to the public, we recommend making it free software that+everyone can redistribute and change.  You can do so by permitting+redistribution under these terms (or, alternatively, under the terms of the+ordinary General Public License).++  To apply these terms, attach the following notices to the library.  It is+safest to attach them to the start of each source file to most effectively+convey the exclusion of warranty; and each file should have at least the+"copyright" line and a pointer to where the full notice is found.++    <one line to give the library's name and a brief idea of what it does.>+    Copyright (C) <year>  <name of author>++    This library is free software; you can redistribute it and/or+    modify it under the terms of the GNU Library General Public+    License as published by the Free Software Foundation; either+    version 2 of the License, or (at your option) any later version.++    This library is distributed in the hope that it will be useful,+    but WITHOUT ANY WARRANTY; without even the implied warranty of+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU+    Library General Public License for more details.++    You should have received a copy of the GNU Library General Public+    License along with this library; if not, write to the Free+    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,+    MA 02111-1307, USA++Also add information on how to contact you by electronic and paper mail.++You should also get your employer (if you work as a programmer) or your+school, if any, to sign a "copyright disclaimer" for the library, if+necessary.  Here is a sample; alter the names:++  Yoyodyne, Inc., hereby disclaims all copyright interest in the+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.++  <signature of Ty Coon>, 1 April 1990+  Ty Coon, President of Vice++That's all there is to it!
+ README view
@@ -0,0 +1,57 @@+Please pick the right section in this file for instructions depending on how you optained the uuagc sources.++IMPORTANT: We assume that you have the latest official release of GHC installed together with the accompanying Cabal package. For older GHC installations, rename:+   uuagc.cabal-for-ghc-6.6      to    uuagc.cabal+ or upgrade to at least Cabal-1.2.x+++-------------------------------------------+Installing uuagc from a source distribution+-------------------------------------------+Here we assume that you have downloaded the sources from http://www.cs.uu.nl/wiki/HUT/Download .++    ghc --make Setup.hs -o setup -package Cabal+    ./setup configure+    ./setup build+    ./setup install++  The 1.0 release of Cabal has a bug that prevents+  the installation step from succeeding.+  You may prefer to use the following alternative:++    ./configure+    make build+    make install++-------------------------------+Using the user package database+-------------------------------++  In the case that you registered uulib in your+  user package database you may install uuagc+  thusly:++    ghc --make Setup.hs -o setup -package Cabal+    ./setup configure --user+    ./setup build+    ./setup install++  Or, alternatively:++    ./configure --with-user-pckg+    make build+    make install++---------------------------------------------------------------+Installing uuagc after checking out from the svn respository+---------------------------------------------------------------+Please note that this is only possible if you alreday have a running version of the uuagc on your system. +This can be downloaded from: http://www.cs.uu.nl/wiki/HUT/Download++  First execute the steps below:++    autoconf+    ./configure+    make build+    make install+
+ Setup.hs view
@@ -0,0 +1,3 @@++import Distribution.Simple+main = defaultMain
+ src-derived/AbstractSyntax.hs view
@@ -0,0 +1,117 @@++-- UUAGC 0.9.5 (AbstractSyntax.ag)+module AbstractSyntax where++-- AbstractSyntax.ag imports+import Data.Set(Set)+import Data.Map(Map)+import Patterns    (Pattern(..),Patterns)+import Expression  (Expression(..))+import CommonTypes+-- Alternative -------------------------------------------------+{-+   alternatives:+      alternative Alternative:+         child con            : {Constructor}+         child children       : Children+         child rules          : Rules+         child typeSigs       : TypeSigs+-}+data Alternative = Alternative (Constructor) (Children) (Rules) (TypeSigs) +-- Alternatives ------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Alternative+         child tl             : Alternatives+      alternative Nil:+-}+type Alternatives = [Alternative]+-- Child -------------------------------------------------------+{-+   alternatives:+      alternative Child:+         child name           : {Name}+         child tp             : {Type}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child higherOrder    : {Bool}+-}+data Child = Child (Name) (Type) (Attributes) (Attributes) (Bool) +-- Children ----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Child+         child tl             : Children+      alternative Nil:+-}+type Children = [Child]+-- Grammar -----------------------------------------------------+{-+   alternatives:+      alternative Grammar:+         child typeSyns       : {TypeSyns}+         child useMap         : {UseMap}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : Productions+         child pragmas        : {PragmaMap}+         child manualAttrOrderMap : {AttrOrderMap}+-}+data Grammar = Grammar (TypeSyns) (UseMap) (Derivings) (Set Nonterminal) (Productions) (PragmaMap) (AttrOrderMap) +-- Production --------------------------------------------------+{-+   alternatives:+      alternative Production:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : Alternatives+-}+data Production = Production (Nonterminal) (Attributes) (Attributes) (Alternatives) +-- Productions -------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Production+         child tl             : Productions+      alternative Nil:+-}+type Productions = [Production]+-- Rule --------------------------------------------------------+{-+   alternatives:+      alternative Rule:+         child pattern        : {Pattern}+         child rhs            : {Expression}+         child owrt           : {Bool}+         child origin         : {String}+-}+data Rule = Rule (Pattern) (Expression) (Bool) (String) +-- Rules -------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Rule+         child tl             : Rules+      alternative Nil:+-}+type Rules = [Rule]+-- TypeSig -----------------------------------------------------+{-+   alternatives:+      alternative TypeSig:+         child name           : {Name}+         child tp             : {Type}+-}+data TypeSig = TypeSig (Name) (Type) +-- TypeSigs ----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : TypeSig+         child tl             : TypeSigs+      alternative Nil:+-}+type TypeSigs = [TypeSig]
+ src-derived/AbstractSyntaxDump.hs view
@@ -0,0 +1,798 @@++-- UUAGC 0.9.5 (AbstractSyntaxDump.ag)+module AbstractSyntaxDump where++import Data.List+import qualified Data.Map as Map++import Pretty+import PPUtil++import AbstractSyntax++-- AbstractSyntax.ag imports+import Data.Set(Set)+import Data.Map(Map)+import Patterns    (Pattern(..),Patterns)+import Expression  (Expression(..))+import CommonTypes++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)++import UU.Scanner.Position(Pos)+-- Alternative -------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Alternative:+         child con            : {Constructor}+         child children       : Children+         child rules          : Rules+         child typeSigs       : TypeSigs+-}+-- cata+sem_Alternative :: Alternative ->+                   T_Alternative+sem_Alternative (Alternative _con _children _rules _typeSigs )  =+    (sem_Alternative_Alternative _con (sem_Children _children ) (sem_Rules _rules ) (sem_TypeSigs _typeSigs ) )+-- semantic domain+newtype T_Alternative = T_Alternative (( PP_Doc))+data Inh_Alternative = Inh_Alternative {}+data Syn_Alternative = Syn_Alternative {pp_Syn_Alternative :: PP_Doc}+wrap_Alternative (T_Alternative sem ) (Inh_Alternative )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_Alternative _lhsOpp ))+sem_Alternative_Alternative :: Constructor ->+                               T_Children ->+                               T_Rules ->+                               T_TypeSigs ->+                               T_Alternative+sem_Alternative_Alternative con_ (T_Children children_ ) (T_Rules rules_ ) (T_TypeSigs typeSigs_ )  =+    (T_Alternative (let _lhsOpp :: PP_Doc+                        _childrenIpp :: PP_Doc+                        _childrenIppL :: ([PP_Doc])+                        _rulesIpp :: PP_Doc+                        _rulesIppL :: ([PP_Doc])+                        _typeSigsIpp :: PP_Doc+                        _typeSigsIppL :: ([PP_Doc])+                        -- "AbstractSyntaxDump.ag"(line 31, column 25)+                        _lhsOpp =+                            ppNestInfo ["Alternative","Alternative"] [pp con_] [ppF "children" $ ppVList _childrenIppL,ppF "rules" $ ppVList _rulesIppL,ppF "typeSigs" $ ppVList _typeSigsIppL] []+                        ( _childrenIpp,_childrenIppL) =+                            (children_ )+                        ( _rulesIpp,_rulesIppL) =+                            (rules_ )+                        ( _typeSigsIpp,_typeSigsIppL) =+                            (typeSigs_ )+                    in  ( _lhsOpp)) )+-- Alternatives ------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : Alternative+         child tl             : Alternatives+      alternative Nil:+-}+-- cata+sem_Alternatives :: Alternatives ->+                    T_Alternatives+sem_Alternatives list  =+    (Prelude.foldr sem_Alternatives_Cons sem_Alternatives_Nil (Prelude.map sem_Alternative list) )+-- semantic domain+newtype T_Alternatives = T_Alternatives (( PP_Doc,([PP_Doc])))+data Inh_Alternatives = Inh_Alternatives {}+data Syn_Alternatives = Syn_Alternatives {pp_Syn_Alternatives :: PP_Doc,ppL_Syn_Alternatives :: [PP_Doc]}+wrap_Alternatives (T_Alternatives sem ) (Inh_Alternatives )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_Alternatives _lhsOpp _lhsOppL ))+sem_Alternatives_Cons :: T_Alternative ->+                         T_Alternatives ->+                         T_Alternatives+sem_Alternatives_Cons (T_Alternative hd_ ) (T_Alternatives tl_ )  =+    (T_Alternatives (let _lhsOppL :: ([PP_Doc])+                         _lhsOpp :: PP_Doc+                         _hdIpp :: PP_Doc+                         _tlIpp :: PP_Doc+                         _tlIppL :: ([PP_Doc])+                         -- "AbstractSyntaxDump.ag"(line 70, column 33)+                         _lhsOppL =+                             _hdIpp : _tlIppL+                         -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                         _lhsOpp =+                             _hdIpp >-< _tlIpp+                         ( _hdIpp) =+                             (hd_ )+                         ( _tlIpp,_tlIppL) =+                             (tl_ )+                     in  ( _lhsOpp,_lhsOppL)) )+sem_Alternatives_Nil :: T_Alternatives+sem_Alternatives_Nil  =+    (T_Alternatives (let _lhsOppL :: ([PP_Doc])+                         _lhsOpp :: PP_Doc+                         -- "AbstractSyntaxDump.ag"(line 71, column 33)+                         _lhsOppL =+                             []+                         -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                         _lhsOpp =+                             empty+                     in  ( _lhsOpp,_lhsOppL)) )+-- Child -------------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Child:+         child name           : {Name}+         child tp             : {Type}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child higherOrder    : {Bool}+-}+-- cata+sem_Child :: Child ->+             T_Child+sem_Child (Child _name _tp _inh _syn _higherOrder )  =+    (sem_Child_Child _name _tp _inh _syn _higherOrder )+-- semantic domain+newtype T_Child = T_Child (( PP_Doc))+data Inh_Child = Inh_Child {}+data Syn_Child = Syn_Child {pp_Syn_Child :: PP_Doc}+wrap_Child (T_Child sem ) (Inh_Child )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_Child _lhsOpp ))+sem_Child_Child :: Name ->+                   Type ->+                   Attributes ->+                   Attributes ->+                   Bool ->+                   T_Child+sem_Child_Child name_ tp_ inh_ syn_ higherOrder_  =+    (T_Child (let _lhsOpp :: PP_Doc+                  -- "AbstractSyntaxDump.ag"(line 34, column 33)+                  _lhsOpp =+                      ppNestInfo ["Child","Child"] [pp name_, ppShow tp_] [ppF "inh" $ ppMap inh_, ppF "syn" $ ppMap syn_] []+              in  ( _lhsOpp)) )+-- Children ----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : Child+         child tl             : Children+      alternative Nil:+-}+-- cata+sem_Children :: Children ->+                T_Children+sem_Children list  =+    (Prelude.foldr sem_Children_Cons sem_Children_Nil (Prelude.map sem_Child list) )+-- semantic domain+newtype T_Children = T_Children (( PP_Doc,([PP_Doc])))+data Inh_Children = Inh_Children {}+data Syn_Children = Syn_Children {pp_Syn_Children :: PP_Doc,ppL_Syn_Children :: [PP_Doc]}+wrap_Children (T_Children sem ) (Inh_Children )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_Children _lhsOpp _lhsOppL ))+sem_Children_Cons :: T_Child ->+                     T_Children ->+                     T_Children+sem_Children_Cons (T_Child hd_ ) (T_Children tl_ )  =+    (T_Children (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     _hdIpp :: PP_Doc+                     _tlIpp :: PP_Doc+                     _tlIppL :: ([PP_Doc])+                     -- "AbstractSyntaxDump.ag"(line 66, column 33)+                     _lhsOppL =+                         _hdIpp : _tlIppL+                     -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                     _lhsOpp =+                         _hdIpp >-< _tlIpp+                     ( _hdIpp) =+                         (hd_ )+                     ( _tlIpp,_tlIppL) =+                         (tl_ )+                 in  ( _lhsOpp,_lhsOppL)) )+sem_Children_Nil :: T_Children+sem_Children_Nil  =+    (T_Children (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     -- "AbstractSyntaxDump.ag"(line 67, column 33)+                     _lhsOppL =+                         []+                     -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                     _lhsOpp =+                         empty+                 in  ( _lhsOpp,_lhsOppL)) )+-- Expression --------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Expression:+         child pos            : {Pos}+         child txt            : {String}+-}+-- cata+sem_Expression :: Expression ->+                  T_Expression+sem_Expression (Expression _pos _txt )  =+    (sem_Expression_Expression _pos _txt )+-- semantic domain+newtype T_Expression = T_Expression (( PP_Doc))+data Inh_Expression = Inh_Expression {}+data Syn_Expression = Syn_Expression {pp_Syn_Expression :: PP_Doc}+wrap_Expression (T_Expression sem ) (Inh_Expression )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_Expression _lhsOpp ))+sem_Expression_Expression :: Pos ->+                             String ->+                             T_Expression+sem_Expression_Expression pos_ txt_  =+    (T_Expression (let _lhsOpp :: PP_Doc+                       -- "AbstractSyntaxDump.ag"(line 49, column 25)+                       _lhsOpp =+                           ppNestInfo ["Expression","Expression"] [ppShow pos_] [ppF "txt" $ text txt_] []+                   in  ( _lhsOpp)) )+-- Grammar -----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Grammar:+         child typeSyns       : {TypeSyns}+         child useMap         : {UseMap}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : Productions+         child pragmas        : {PragmaMap}+         child manualAttrOrderMap : {AttrOrderMap}+-}+-- cata+sem_Grammar :: Grammar ->+               T_Grammar+sem_Grammar (Grammar _typeSyns _useMap _derivings _wrappers _prods _pragmas _manualAttrOrderMap )  =+    (sem_Grammar_Grammar _typeSyns _useMap _derivings _wrappers (sem_Productions _prods ) _pragmas _manualAttrOrderMap )+-- semantic domain+newtype T_Grammar = T_Grammar (( PP_Doc))+data Inh_Grammar = Inh_Grammar {}+data Syn_Grammar = Syn_Grammar {pp_Syn_Grammar :: PP_Doc}+wrap_Grammar (T_Grammar sem ) (Inh_Grammar )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_Grammar _lhsOpp ))+sem_Grammar_Grammar :: TypeSyns ->+                       UseMap ->+                       Derivings ->+                       (Set Nonterminal) ->+                       T_Productions ->+                       PragmaMap ->+                       AttrOrderMap ->+                       T_Grammar+sem_Grammar_Grammar typeSyns_ useMap_ derivings_ wrappers_ (T_Productions prods_ ) pragmas_ manualAttrOrderMap_  =+    (T_Grammar (let _lhsOpp :: PP_Doc+                    _prodsIpp :: PP_Doc+                    _prodsIppL :: ([PP_Doc])+                    -- "AbstractSyntaxDump.ag"(line 19, column 25)+                    _lhsOpp =+                        ppNestInfo ["Grammar","Grammar"] []+                           [ ppF "typeSyns" $ ppAssocL typeSyns_+                           , ppF "useMap" $ ppMap $ Map.map ppMap $ useMap_+                           , ppF "derivings" $ ppMap $ derivings_+                           , ppF "wrappers" $ ppShow $ wrappers_+                           , ppF "prods" $ ppVList _prodsIppL+                           ] []+                    ( _prodsIpp,_prodsIppL) =+                        (prods_ )+                in  ( _lhsOpp)) )+-- Pattern -----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         pp                   : PP_Doc+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local copy        : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts )  =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+sem_Pattern (Constr _name _pats )  =+    (sem_Pattern_Constr _name (sem_Patterns _pats ) )+sem_Pattern (Product _pos _pats )  =+    (sem_Pattern_Product _pos (sem_Patterns _pats ) )+sem_Pattern (Underscore _pos )  =+    (sem_Pattern_Underscore _pos )+-- semantic domain+newtype T_Pattern = T_Pattern (( Pattern,PP_Doc))+data Inh_Pattern = Inh_Pattern {}+data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: Pattern,pp_Syn_Pattern :: PP_Doc}+wrap_Pattern (T_Pattern sem ) (Inh_Pattern )  =+    (let ( _lhsOcopy,_lhsOpp) =+             (sem )+     in  (Syn_Pattern _lhsOcopy _lhsOpp ))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ )  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    _patIcopy :: Pattern+                    _patIpp :: PP_Doc+                    _partsIcopy :: Patterns+                    _partsIpp :: PP_Doc+                    _partsIppL :: ([PP_Doc])+                    -- "AbstractSyntaxDump.ag"(line 45, column 33)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Alias"] [pp field_, pp attr_] [ppF "pat" $ _patIpp] []+                    -- self rule+                    _copy =+                        Alias field_ attr_ _patIcopy _partsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patIcopy,_patIpp) =+                        (pat_ )+                    ( _partsIcopy,_partsIpp,_partsIppL) =+                        (parts_ )+                in  ( _lhsOcopy,_lhsOpp)) )+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_ )  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIpp :: PP_Doc+                    _patsIppL :: ([PP_Doc])+                    -- "AbstractSyntaxDump.ag"(line 43, column 33)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Constr"] [pp name_] [ppF "pats" $ ppVList _patsIppL] []+                    -- self rule+                    _copy =+                        Constr name_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIpp,_patsIppL) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOpp)) )+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_ )  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIpp :: PP_Doc+                    _patsIppL :: ([PP_Doc])+                    -- "AbstractSyntaxDump.ag"(line 44, column 33)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Product"] [ppShow pos_] [ppF "pats" $ ppVList _patsIppL] []+                    -- self rule+                    _copy =+                        Product pos_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIpp,_patsIppL) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOpp)) )+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    -- "AbstractSyntaxDump.ag"(line 46, column 25)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Underscore"] [ppShow pos_] [] []+                    -- self rule+                    _copy =+                        Underscore pos_+                    -- self rule+                    _lhsOcopy =+                        _copy+                in  ( _lhsOcopy,_lhsOpp)) )+-- Patterns ----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+      alternative Nil:+         visit 0:+            local copy        : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list  =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns (( Patterns,PP_Doc,([PP_Doc])))+data Inh_Patterns = Inh_Patterns {}+data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: Patterns,pp_Syn_Patterns :: PP_Doc,ppL_Syn_Patterns :: [PP_Doc]}+wrap_Patterns (T_Patterns sem ) (Inh_Patterns )  =+    (let ( _lhsOcopy,_lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_Patterns _lhsOcopy _lhsOpp _lhsOppL ))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =+    (T_Patterns (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     _lhsOcopy :: Patterns+                     _hdIcopy :: Pattern+                     _hdIpp :: PP_Doc+                     _tlIcopy :: Patterns+                     _tlIpp :: PP_Doc+                     _tlIppL :: ([PP_Doc])+                     -- "AbstractSyntaxDump.ag"(line 54, column 33)+                     _lhsOppL =+                         _hdIpp : _tlIppL+                     -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                     _lhsOpp =+                         _hdIpp >-< _tlIpp+                     -- self rule+                     _copy =+                         (:) _hdIcopy _tlIcopy+                     -- self rule+                     _lhsOcopy =+                         _copy+                     ( _hdIcopy,_hdIpp) =+                         (hd_ )+                     ( _tlIcopy,_tlIpp,_tlIppL) =+                         (tl_ )+                 in  ( _lhsOcopy,_lhsOpp,_lhsOppL)) )+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     _lhsOcopy :: Patterns+                     -- "AbstractSyntaxDump.ag"(line 55, column 33)+                     _lhsOppL =+                         []+                     -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                     _lhsOpp =+                         empty+                     -- self rule+                     _copy =+                         []+                     -- self rule+                     _lhsOcopy =+                         _copy+                 in  ( _lhsOcopy,_lhsOpp,_lhsOppL)) )+-- Production --------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Production:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : Alternatives+-}+-- cata+sem_Production :: Production ->+                  T_Production+sem_Production (Production _nt _inh _syn _alts )  =+    (sem_Production_Production _nt _inh _syn (sem_Alternatives _alts ) )+-- semantic domain+newtype T_Production = T_Production (( PP_Doc))+data Inh_Production = Inh_Production {}+data Syn_Production = Syn_Production {pp_Syn_Production :: PP_Doc}+wrap_Production (T_Production sem ) (Inh_Production )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_Production _lhsOpp ))+sem_Production_Production :: Nonterminal ->+                             Attributes ->+                             Attributes ->+                             T_Alternatives ->+                             T_Production+sem_Production_Production nt_ inh_ syn_ (T_Alternatives alts_ )  =+    (T_Production (let _lhsOpp :: PP_Doc+                       _altsIpp :: PP_Doc+                       _altsIppL :: ([PP_Doc])+                       -- "AbstractSyntaxDump.ag"(line 28, column 25)+                       _lhsOpp =+                           ppNestInfo ["Production","Production"] [pp nt_] [ppF "inh" $ ppMap inh_, ppF "syn" $ ppMap syn_, ppF "alts" $ ppVList _altsIppL] []+                       ( _altsIpp,_altsIppL) =+                           (alts_ )+                   in  ( _lhsOpp)) )+-- Productions -------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : Production+         child tl             : Productions+      alternative Nil:+-}+-- cata+sem_Productions :: Productions ->+                   T_Productions+sem_Productions list  =+    (Prelude.foldr sem_Productions_Cons sem_Productions_Nil (Prelude.map sem_Production list) )+-- semantic domain+newtype T_Productions = T_Productions (( PP_Doc,([PP_Doc])))+data Inh_Productions = Inh_Productions {}+data Syn_Productions = Syn_Productions {pp_Syn_Productions :: PP_Doc,ppL_Syn_Productions :: [PP_Doc]}+wrap_Productions (T_Productions sem ) (Inh_Productions )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_Productions _lhsOpp _lhsOppL ))+sem_Productions_Cons :: T_Production ->+                        T_Productions ->+                        T_Productions+sem_Productions_Cons (T_Production hd_ ) (T_Productions tl_ )  =+    (T_Productions (let _lhsOppL :: ([PP_Doc])+                        _lhsOpp :: PP_Doc+                        _hdIpp :: PP_Doc+                        _tlIpp :: PP_Doc+                        _tlIppL :: ([PP_Doc])+                        -- "AbstractSyntaxDump.ag"(line 74, column 33)+                        _lhsOppL =+                            _hdIpp : _tlIppL+                        -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                        _lhsOpp =+                            _hdIpp >-< _tlIpp+                        ( _hdIpp) =+                            (hd_ )+                        ( _tlIpp,_tlIppL) =+                            (tl_ )+                    in  ( _lhsOpp,_lhsOppL)) )+sem_Productions_Nil :: T_Productions+sem_Productions_Nil  =+    (T_Productions (let _lhsOppL :: ([PP_Doc])+                        _lhsOpp :: PP_Doc+                        -- "AbstractSyntaxDump.ag"(line 75, column 33)+                        _lhsOppL =+                            []+                        -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                        _lhsOpp =+                            empty+                    in  ( _lhsOpp,_lhsOppL)) )+-- Rule --------------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Rule:+         child pattern        : Pattern+         child rhs            : Expression+         child owrt           : {Bool}+         child origin         : {String}+-}+-- cata+sem_Rule :: Rule ->+            T_Rule+sem_Rule (Rule _pattern _rhs _owrt _origin )  =+    (sem_Rule_Rule (sem_Pattern _pattern ) (sem_Expression _rhs ) _owrt _origin )+-- semantic domain+newtype T_Rule = T_Rule (( PP_Doc))+data Inh_Rule = Inh_Rule {}+data Syn_Rule = Syn_Rule {pp_Syn_Rule :: PP_Doc}+wrap_Rule (T_Rule sem ) (Inh_Rule )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_Rule _lhsOpp ))+sem_Rule_Rule :: T_Pattern ->+                 T_Expression ->+                 Bool ->+                 String ->+                 T_Rule+sem_Rule_Rule (T_Pattern pattern_ ) (T_Expression rhs_ ) owrt_ origin_  =+    (T_Rule (let _lhsOpp :: PP_Doc+                 _patternIcopy :: Pattern+                 _patternIpp :: PP_Doc+                 _rhsIpp :: PP_Doc+                 -- "AbstractSyntaxDump.ag"(line 37, column 33)+                 _lhsOpp =+                     ppNestInfo ["Rule","Rule"] [ppShow owrt_, pp origin_] [ppF "pattern" $ _patternIpp, ppF "rhs" $ _rhsIpp] []+                 ( _patternIcopy,_patternIpp) =+                     (pattern_ )+                 ( _rhsIpp) =+                     (rhs_ )+             in  ( _lhsOpp)) )+-- Rules -------------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : Rule+         child tl             : Rules+      alternative Nil:+-}+-- cata+sem_Rules :: Rules ->+             T_Rules+sem_Rules list  =+    (Prelude.foldr sem_Rules_Cons sem_Rules_Nil (Prelude.map sem_Rule list) )+-- semantic domain+newtype T_Rules = T_Rules (( PP_Doc,([PP_Doc])))+data Inh_Rules = Inh_Rules {}+data Syn_Rules = Syn_Rules {pp_Syn_Rules :: PP_Doc,ppL_Syn_Rules :: [PP_Doc]}+wrap_Rules (T_Rules sem ) (Inh_Rules )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_Rules _lhsOpp _lhsOppL ))+sem_Rules_Cons :: T_Rule ->+                  T_Rules ->+                  T_Rules+sem_Rules_Cons (T_Rule hd_ ) (T_Rules tl_ )  =+    (T_Rules (let _lhsOppL :: ([PP_Doc])+                  _lhsOpp :: PP_Doc+                  _hdIpp :: PP_Doc+                  _tlIpp :: PP_Doc+                  _tlIppL :: ([PP_Doc])+                  -- "AbstractSyntaxDump.ag"(line 62, column 33)+                  _lhsOppL =+                      _hdIpp : _tlIppL+                  -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                  _lhsOpp =+                      _hdIpp >-< _tlIpp+                  ( _hdIpp) =+                      (hd_ )+                  ( _tlIpp,_tlIppL) =+                      (tl_ )+              in  ( _lhsOpp,_lhsOppL)) )+sem_Rules_Nil :: T_Rules+sem_Rules_Nil  =+    (T_Rules (let _lhsOppL :: ([PP_Doc])+                  _lhsOpp :: PP_Doc+                  -- "AbstractSyntaxDump.ag"(line 63, column 33)+                  _lhsOppL =+                      []+                  -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                  _lhsOpp =+                      empty+              in  ( _lhsOpp,_lhsOppL)) )+-- TypeSig -----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative TypeSig:+         child name           : {Name}+         child tp             : {Type}+-}+-- cata+sem_TypeSig :: TypeSig ->+               T_TypeSig+sem_TypeSig (TypeSig _name _tp )  =+    (sem_TypeSig_TypeSig _name _tp )+-- semantic domain+newtype T_TypeSig = T_TypeSig (( PP_Doc))+data Inh_TypeSig = Inh_TypeSig {}+data Syn_TypeSig = Syn_TypeSig {pp_Syn_TypeSig :: PP_Doc}+wrap_TypeSig (T_TypeSig sem ) (Inh_TypeSig )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_TypeSig _lhsOpp ))+sem_TypeSig_TypeSig :: Name ->+                       Type ->+                       T_TypeSig+sem_TypeSig_TypeSig name_ tp_  =+    (T_TypeSig (let _lhsOpp :: PP_Doc+                    -- "AbstractSyntaxDump.ag"(line 40, column 33)+                    _lhsOpp =+                        ppNestInfo ["TypeSig","TypeSig"] [pp name_, ppShow tp_] [] []+                in  ( _lhsOpp)) )+-- TypeSigs ----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : TypeSig+         child tl             : TypeSigs+      alternative Nil:+-}+-- cata+sem_TypeSigs :: TypeSigs ->+                T_TypeSigs+sem_TypeSigs list  =+    (Prelude.foldr sem_TypeSigs_Cons sem_TypeSigs_Nil (Prelude.map sem_TypeSig list) )+-- semantic domain+newtype T_TypeSigs = T_TypeSigs (( PP_Doc,([PP_Doc])))+data Inh_TypeSigs = Inh_TypeSigs {}+data Syn_TypeSigs = Syn_TypeSigs {pp_Syn_TypeSigs :: PP_Doc,ppL_Syn_TypeSigs :: [PP_Doc]}+wrap_TypeSigs (T_TypeSigs sem ) (Inh_TypeSigs )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_TypeSigs _lhsOpp _lhsOppL ))+sem_TypeSigs_Cons :: T_TypeSig ->+                     T_TypeSigs ->+                     T_TypeSigs+sem_TypeSigs_Cons (T_TypeSig hd_ ) (T_TypeSigs tl_ )  =+    (T_TypeSigs (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     _hdIpp :: PP_Doc+                     _tlIpp :: PP_Doc+                     _tlIppL :: ([PP_Doc])+                     -- "AbstractSyntaxDump.ag"(line 58, column 33)+                     _lhsOppL =+                         _hdIpp : _tlIppL+                     -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                     _lhsOpp =+                         _hdIpp >-< _tlIpp+                     ( _hdIpp) =+                         (hd_ )+                     ( _tlIpp,_tlIppL) =+                         (tl_ )+                 in  ( _lhsOpp,_lhsOppL)) )+sem_TypeSigs_Nil :: T_TypeSigs+sem_TypeSigs_Nil  =+    (T_TypeSigs (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     -- "AbstractSyntaxDump.ag"(line 59, column 33)+                     _lhsOppL =+                         []+                     -- use rule "AbstractSyntaxDump.ag"(line 16, column 58)+                     _lhsOpp =+                         empty+                 in  ( _lhsOpp,_lhsOppL)) )
+ src-derived/Code.hs view
@@ -0,0 +1,243 @@++-- UUAGC 0.9.5 (Code.ag)+module Code where++import Pretty+import Patterns+import Data.List(partition)+import Data.Set(Set)+import qualified UU.DData.Set as Set+import Data.Map(Map)+import qualified Data.Map as Map++-- Unboxed tuples+--   unbox  Whether unboxed tuples are wanted or not+--   inh    The inherited attributes. +--          If there are none, no unboxing can take place, +--          because in that case the semantic function (a top-level identifier) would have an unboxed type.+-- Of course we can't have an unboxed 1-tuple+mkTupleExpr :: Bool -> Bool -> Exprs -> Expr+mkTupleExpr unbox noInh exprs | not unbox || noInh || length exprs == 1 = TupleExpr exprs+                              | otherwise                               = UnboxedTupleExpr exprs+mkTupleType :: Bool -> Bool -> Types -> Type+mkTupleType unbox noInh tps | not unbox || noInh || length tps == 1 = TupleType tps+                            | otherwise                             = UnboxedTupleType tps+mkTupleLhs :: Bool -> Bool -> [String] -> Lhs+mkTupleLhs  unbox noInh comps | not unbox || noInh || length comps == 1 = TupleLhs comps+                              | otherwise                               = UnboxedTupleLhs comps+-- CaseAlt -----------------------------------------------------+{-+   alternatives:+      alternative CaseAlt:+         child left           : Lhs+         child expr           : Expr+-}+data CaseAlt = CaseAlt (Lhs) (Expr) +-- CaseAlts ----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : CaseAlt+         child tl             : CaseAlts+      alternative Nil:+-}+type CaseAlts = [CaseAlt]+-- Chunk -------------------------------------------------------+{-+   alternatives:+      alternative Chunk:+         child name           : {String}+         child comment        : Decl+         child info           : Decls+         child dataDef        : Decls+         child cataFun        : Decls+         child semDom         : Decls+         child semWrapper     : Decls+         child semFunctions   : Decls+         child semNames       : {[String]}+-}+data Chunk = Chunk (String) (Decl) (Decls) (Decls) (Decls) (Decls) (Decls) (Decls) ([String]) +-- Chunks ------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Chunk+         child tl             : Chunks+      alternative Nil:+-}+type Chunks = [Chunk]+-- DataAlt -----------------------------------------------------+{-+   alternatives:+      alternative DataAlt:+         child name           : {String}+         child args           : {[String]}+      alternative Record:+         child name           : {String}+         child args           : {[(String,String)]}+-}+data DataAlt = DataAlt (String) ([String]) +             | Record (String) ([(String,String)]) +-- DataAlts ----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : DataAlt+         child tl             : DataAlts+      alternative Nil:+-}+type DataAlts = [DataAlt]+-- Decl --------------------------------------------------------+{-+   alternatives:+      alternative Comment:+         child txt            : {String}+      alternative Data:+         child name           : {String}+         child alts           : DataAlts+         child strict         : {Bool}+         child derivings      : {[String]}+      alternative Decl:+         child left           : Lhs+         child rhs            : Expr+         child binds          : {Set String}+         child uses           : {Set String}+      alternative NewType:+         child name           : {String}+         child con            : {String}+         child tp             : Type+      alternative PragmaDecl:+         child txt            : {String}+      alternative TSig:+         child name           : {String}+         child tp             : Type+      alternative Type:+         child name           : {String}+         child tp             : Type+-}+data Decl = Comment (String) +          | Data (String) (DataAlts) (Bool) ([String]) +          | Decl (Lhs) (Expr) (Set String) (Set String) +          | NewType (String) (String) (Type) +          | PragmaDecl (String) +          | TSig (String) (Type) +          | Type (String) (Type) +-- Decls -------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Decl+         child tl             : Decls+      alternative Nil:+-}+type Decls = [Decl]+-- Expr --------------------------------------------------------+{-+   alternatives:+      alternative App:+         child name           : {String}+         child args           : Exprs+      alternative Case:+         child expr           : Expr+         child alts           : CaseAlts+      alternative Lambda:+         child args           : {[String]}+         child body           : Expr+      alternative Let:+         child decls          : Decls+         child body           : Expr+      alternative LineExpr:+         child expr           : Expr+      alternative PragmaExpr:+         child onLeftSide     : {Bool}+         child onNewLine      : {Bool}+         child txt            : {String}+         child expr           : Expr+      alternative SimpleExpr:+         child txt            : {String}+      alternative TextExpr:+         child lns            : {[String]}+      alternative Trace:+         child txt            : {String}+         child expr           : Expr+      alternative TupleExpr:+         child exprs          : Exprs+      alternative UnboxedTupleExpr:+         child exprs          : Exprs+-}+data Expr = App (String) (Exprs) +          | Case (Expr) (CaseAlts) +          | Lambda ([String]) (Expr) +          | Let (Decls) (Expr) +          | LineExpr (Expr) +          | PragmaExpr (Bool) (Bool) (String) (Expr) +          | SimpleExpr (String) +          | TextExpr ([String]) +          | Trace (String) (Expr) +          | TupleExpr (Exprs) +          | UnboxedTupleExpr (Exprs) +-- Exprs -------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Expr+         child tl             : Exprs+      alternative Nil:+-}+type Exprs = [Expr]+-- Lhs ---------------------------------------------------------+{-+   alternatives:+      alternative Fun:+         child name           : {String}+         child args           : Exprs+      alternative Pattern3:+         child pat3           : {Pattern}+      alternative Pattern3SM:+         child pat3           : {Pattern}+      alternative TupleLhs:+         child comps          : {[String]}+      alternative UnboxedTupleLhs:+         child comps          : {[String]}+-}+data Lhs = Fun (String) (Exprs) +         | Pattern3 (Pattern) +         | Pattern3SM (Pattern) +         | TupleLhs ([String]) +         | UnboxedTupleLhs ([String]) +-- Program -----------------------------------------------------+{-+   alternatives:+      alternative Program:+         child chunks         : Chunks+-}+data Program = Program (Chunks) +-- Type --------------------------------------------------------+{-+   alternatives:+      alternative Arr:+         child left           : Type+         child right          : Type+      alternative List:+         child tp             : Type+      alternative SimpleType:+         child txt            : {String}+      alternative TupleType:+         child tps            : Types+      alternative UnboxedTupleType:+         child tps            : Types+-}+data Type = Arr (Type) (Type) +          | List (Type) +          | SimpleType (String) +          | TupleType (Types) +          | UnboxedTupleType (Types) +-- Types -------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Type+         child tl             : Types+      alternative Nil:+-}+type Types = [Type]
+ src-derived/CodeSyntax.hs view
@@ -0,0 +1,139 @@++-- UUAGC 0.9.5 (CodeSyntax.ag)+module CodeSyntax where++import Patterns+import CommonTypes+import Data.Map(Map)+import Data.Set(Set)+-- CAlternative ------------------------------------------------+{-+   alternatives:+      alternative CAlternative:+         child con            : {Constructor}+         child visits         : CVisits+         child children       : {[(Name,Type,Bool)]}+         child terminals      : {[Name]}+-}+data CAlternative = CAlternative (Constructor) (CVisits) ([(Name,Type,Bool)]) ([Name]) +-- CAlternatives -----------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : CAlternative+         child tl             : CAlternatives+      alternative Nil:+-}+type CAlternatives = [CAlternative]+-- CGrammar ----------------------------------------------------+{-+   alternatives:+      alternative CGrammar:+         child typeSyns       : {TypeSyns}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : CProductions+         child pragmas        : {PragmaMap}+-}+data CGrammar = CGrammar (TypeSyns) (Derivings) (Set Nonterminal) (CProductions) (PragmaMap) +-- CInterface --------------------------------------------------+{-+   alternatives:+      alternative CInterface:+         child seg            : CSegments+-}+data CInterface = CInterface (CSegments) +-- CProduction -------------------------------------------------+{-+   alternatives:+      alternative CProduction:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : CAlternatives+         child inter          : CInterface+-}+data CProduction = CProduction (Nonterminal) (Attributes) (Attributes) (CAlternatives) (CInterface) +-- CProductions ------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : CProduction+         child tl             : CProductions+      alternative Nil:+-}+type CProductions = [CProduction]+-- CRule -------------------------------------------------------+{-+   alternatives:+      alternative CChildVisit:+         child name           : {Name}+         child nt             : {Nonterminal}+         child nr             : {Int}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child isLast         : {Bool}+      alternative CRule:+         child name           : {Name}+         child isIn           : {Bool}+         child hasCode        : {Bool}+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child childnt        : {Maybe Nonterminal}+         child tp             : {Maybe Type}+         child pattern        : {Pattern}+         child rhs            : {[String]}+         child defines        : {Map Int (Name,Name,Maybe Type)}+         child owrt           : {Bool}+         child origin         : {String}+         child uses           : {Set (Name, Name)}+-}+data CRule = CChildVisit (Name) (Nonterminal) (Int) (Attributes) (Attributes) (Bool) +           | CRule (Name) (Bool) (Bool) (Nonterminal) (Constructor) (Name) (Maybe Nonterminal) (Maybe Type) (Pattern) ([String]) (Map Int (Name,Name,Maybe Type)) (Bool) (String) (Set (Name, Name)) +-- CSegment ----------------------------------------------------+{-+   alternatives:+      alternative CSegment:+         child inh            : {Attributes}+         child syn            : {Attributes}+-}+data CSegment = CSegment (Attributes) (Attributes) +-- CSegments ---------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : CSegment+         child tl             : CSegments+      alternative Nil:+-}+type CSegments = [CSegment]+-- CVisit ------------------------------------------------------+{-+   alternatives:+      alternative CVisit:+         child inh            : {Attributes}+         child syn            : {Attributes}+         child vss            : Sequence+         child intra          : Sequence+         child ordered        : {Bool}+-}+data CVisit = CVisit (Attributes) (Attributes) (Sequence) (Sequence) (Bool) +-- CVisits -----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : CVisit+         child tl             : CVisits+      alternative Nil:+-}+type CVisits = [CVisit]+-- Sequence ----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : CRule+         child tl             : Sequence+      alternative Nil:+-}+type Sequence = [CRule]
+ src-derived/CodeSyntaxDump.hs view
@@ -0,0 +1,848 @@++-- UUAGC 0.9.5 (CodeSyntaxDump.ag)+module CodeSyntaxDump where++import Data.List+import qualified Data.Map as Map++import Pretty+import PPUtil++import CodeSyntax++import Patterns+import CommonTypes+import Data.Map(Map)+import Data.Set(Set)++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)++ppChild :: (Name,Type,Bool) -> PP_Doc+ppChild (nm,tp,b)+  = pp nm >#< "::" >#< pp (show tp) >#< "<" >|< ppBool b >|< ">"+  +ppVertexMap :: Map Int (Name,Name,Maybe Type) -> PP_Doc+ppVertexMap m+  = ppVList [ ppF (show k) $ ppAttr v | (k,v) <- Map.toList m ]++ppAttr :: (Name,Name,Maybe Type) -> PP_Doc+ppAttr (fld,nm,mTp)+  = pp fld >|< "." >|< pp nm >#<+    case mTp of+      Just tp -> pp "::" >#< show tp+      Nothing -> empty++ppBool :: Bool -> PP_Doc+ppBool True  = pp "T"+ppBool False = pp "F"++ppMaybeShow :: Show a => Maybe a -> PP_Doc+ppMaybeShow (Just x) = pp (show x)+ppMaybeShow Nothing  = pp "_"++ppStrings :: [String] -> PP_Doc+ppStrings = vlist+-- CAlternative ------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative CAlternative:+         child con            : {Constructor}+         child visits         : CVisits+         child children       : {[(Name,Type,Bool)]}+         child terminals      : {[Name]}+-}+-- cata+sem_CAlternative :: CAlternative ->+                    T_CAlternative+sem_CAlternative (CAlternative _con _visits _children _terminals )  =+    (sem_CAlternative_CAlternative _con (sem_CVisits _visits ) _children _terminals )+-- semantic domain+newtype T_CAlternative = T_CAlternative (( PP_Doc))+data Inh_CAlternative = Inh_CAlternative {}+data Syn_CAlternative = Syn_CAlternative {pp_Syn_CAlternative :: PP_Doc}+wrap_CAlternative (T_CAlternative sem ) (Inh_CAlternative )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_CAlternative _lhsOpp ))+sem_CAlternative_CAlternative :: Constructor ->+                                 T_CVisits ->+                                 ([(Name,Type,Bool)]) ->+                                 ([Name]) ->+                                 T_CAlternative+sem_CAlternative_CAlternative con_ (T_CVisits visits_ ) children_ terminals_  =+    (T_CAlternative (let _lhsOpp :: PP_Doc+                         _visitsIpp :: PP_Doc+                         _visitsIppL :: ([PP_Doc])+                         -- "CodeSyntaxDump.ag"(line 63, column 25)+                         _lhsOpp =+                             ppNestInfo ["CAlternative","CAlternative"] [pp con_] [ppF "visits" $ ppVList _visitsIppL, ppF "children" $ ppVList (map ppChild children_),ppF "terminals" $ ppVList (map ppShow terminals_)] []+                         ( _visitsIpp,_visitsIppL) =+                             (visits_ )+                     in  ( _lhsOpp)) )+-- CAlternatives -----------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : CAlternative+         child tl             : CAlternatives+      alternative Nil:+-}+-- cata+sem_CAlternatives :: CAlternatives ->+                     T_CAlternatives+sem_CAlternatives list  =+    (Prelude.foldr sem_CAlternatives_Cons sem_CAlternatives_Nil (Prelude.map sem_CAlternative list) )+-- semantic domain+newtype T_CAlternatives = T_CAlternatives (( PP_Doc,([PP_Doc])))+data Inh_CAlternatives = Inh_CAlternatives {}+data Syn_CAlternatives = Syn_CAlternatives {pp_Syn_CAlternatives :: PP_Doc,ppL_Syn_CAlternatives :: [PP_Doc]}+wrap_CAlternatives (T_CAlternatives sem ) (Inh_CAlternatives )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_CAlternatives _lhsOpp _lhsOppL ))+sem_CAlternatives_Cons :: T_CAlternative ->+                          T_CAlternatives ->+                          T_CAlternatives+sem_CAlternatives_Cons (T_CAlternative hd_ ) (T_CAlternatives tl_ )  =+    (T_CAlternatives (let _lhsOppL :: ([PP_Doc])+                          _lhsOpp :: PP_Doc+                          _hdIpp :: PP_Doc+                          _tlIpp :: PP_Doc+                          _tlIppL :: ([PP_Doc])+                          -- "CodeSyntaxDump.ag"(line 94, column 33)+                          _lhsOppL =+                              _hdIpp : _tlIppL+                          -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                          _lhsOpp =+                              _hdIpp >-< _tlIpp+                          ( _hdIpp) =+                              (hd_ )+                          ( _tlIpp,_tlIppL) =+                              (tl_ )+                      in  ( _lhsOpp,_lhsOppL)) )+sem_CAlternatives_Nil :: T_CAlternatives+sem_CAlternatives_Nil  =+    (T_CAlternatives (let _lhsOppL :: ([PP_Doc])+                          _lhsOpp :: PP_Doc+                          -- "CodeSyntaxDump.ag"(line 95, column 33)+                          _lhsOppL =+                              []+                          -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                          _lhsOpp =+                              empty+                      in  ( _lhsOpp,_lhsOppL)) )+-- CGrammar ----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative CGrammar:+         child typeSyns       : {TypeSyns}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : CProductions+         child pragmas        : {PragmaMap}+-}+-- cata+sem_CGrammar :: CGrammar ->+                T_CGrammar+sem_CGrammar (CGrammar _typeSyns _derivings _wrappers _prods _pragmas )  =+    (sem_CGrammar_CGrammar _typeSyns _derivings _wrappers (sem_CProductions _prods ) _pragmas )+-- semantic domain+newtype T_CGrammar = T_CGrammar (( PP_Doc))+data Inh_CGrammar = Inh_CGrammar {}+data Syn_CGrammar = Syn_CGrammar {pp_Syn_CGrammar :: PP_Doc}+wrap_CGrammar (T_CGrammar sem ) (Inh_CGrammar )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_CGrammar _lhsOpp ))+sem_CGrammar_CGrammar :: TypeSyns ->+                         Derivings ->+                         (Set Nonterminal) ->+                         T_CProductions ->+                         PragmaMap ->+                         T_CGrammar+sem_CGrammar_CGrammar typeSyns_ derivings_ wrappers_ (T_CProductions prods_ ) pragmas_  =+    (T_CGrammar (let _lhsOpp :: PP_Doc+                     _prodsIpp :: PP_Doc+                     _prodsIppL :: ([PP_Doc])+                     -- "CodeSyntaxDump.ag"(line 47, column 21)+                     _lhsOpp =+                         ppNestInfo ["CGrammar","CGrammar"] []+                                    [ ppF "typeSyns"  $ ppAssocL typeSyns_+                                    , ppF "derivings" $ ppMap $ derivings_+                                    , ppF "prods"     $ ppVList _prodsIppL+                                    ] []+                     ( _prodsIpp,_prodsIppL) =+                         (prods_ )+                 in  ( _lhsOpp)) )+-- CInterface --------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative CInterface:+         child seg            : CSegments+-}+-- cata+sem_CInterface :: CInterface ->+                  T_CInterface+sem_CInterface (CInterface _seg )  =+    (sem_CInterface_CInterface (sem_CSegments _seg ) )+-- semantic domain+newtype T_CInterface = T_CInterface (( PP_Doc))+data Inh_CInterface = Inh_CInterface {}+data Syn_CInterface = Syn_CInterface {pp_Syn_CInterface :: PP_Doc}+wrap_CInterface (T_CInterface sem ) (Inh_CInterface )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_CInterface _lhsOpp ))+sem_CInterface_CInterface :: T_CSegments ->+                             T_CInterface+sem_CInterface_CInterface (T_CSegments seg_ )  =+    (T_CInterface (let _lhsOpp :: PP_Doc+                       _segIpp :: PP_Doc+                       _segIppL :: ([PP_Doc])+                       -- "CodeSyntaxDump.ag"(line 57, column 21)+                       _lhsOpp =+                           ppNestInfo ["CInterface","CInterface"] [] [ppF "seg" $ ppVList _segIppL] []+                       ( _segIpp,_segIppL) =+                           (seg_ )+                   in  ( _lhsOpp)) )+-- CProduction -------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative CProduction:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : CAlternatives+         child inter          : CInterface+-}+-- cata+sem_CProduction :: CProduction ->+                   T_CProduction+sem_CProduction (CProduction _nt _inh _syn _alts _inter )  =+    (sem_CProduction_CProduction _nt _inh _syn (sem_CAlternatives _alts ) (sem_CInterface _inter ) )+-- semantic domain+newtype T_CProduction = T_CProduction (( PP_Doc))+data Inh_CProduction = Inh_CProduction {}+data Syn_CProduction = Syn_CProduction {pp_Syn_CProduction :: PP_Doc}+wrap_CProduction (T_CProduction sem ) (Inh_CProduction )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_CProduction _lhsOpp ))+sem_CProduction_CProduction :: Nonterminal ->+                               Attributes ->+                               Attributes ->+                               T_CAlternatives ->+                               T_CInterface ->+                               T_CProduction+sem_CProduction_CProduction nt_ inh_ syn_ (T_CAlternatives alts_ ) (T_CInterface inter_ )  =+    (T_CProduction (let _lhsOpp :: PP_Doc+                        _altsIpp :: PP_Doc+                        _altsIppL :: ([PP_Doc])+                        _interIpp :: PP_Doc+                        -- "CodeSyntaxDump.ag"(line 54, column 25)+                        _lhsOpp =+                            ppNestInfo ["CProduction","CProduction"] [pp nt_] [ppF "inh" $ ppMap inh_, ppF "syn" $ ppMap syn_, ppF "alts" $ ppVList _altsIppL, ppF "inter" _interIpp] []+                        ( _altsIpp,_altsIppL) =+                            (alts_ )+                        ( _interIpp) =+                            (inter_ )+                    in  ( _lhsOpp)) )+-- CProductions ------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : CProduction+         child tl             : CProductions+      alternative Nil:+-}+-- cata+sem_CProductions :: CProductions ->+                    T_CProductions+sem_CProductions list  =+    (Prelude.foldr sem_CProductions_Cons sem_CProductions_Nil (Prelude.map sem_CProduction list) )+-- semantic domain+newtype T_CProductions = T_CProductions (( PP_Doc,([PP_Doc])))+data Inh_CProductions = Inh_CProductions {}+data Syn_CProductions = Syn_CProductions {pp_Syn_CProductions :: PP_Doc,ppL_Syn_CProductions :: [PP_Doc]}+wrap_CProductions (T_CProductions sem ) (Inh_CProductions )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_CProductions _lhsOpp _lhsOppL ))+sem_CProductions_Cons :: T_CProduction ->+                         T_CProductions ->+                         T_CProductions+sem_CProductions_Cons (T_CProduction hd_ ) (T_CProductions tl_ )  =+    (T_CProductions (let _lhsOppL :: ([PP_Doc])+                         _lhsOpp :: PP_Doc+                         _hdIpp :: PP_Doc+                         _tlIpp :: PP_Doc+                         _tlIppL :: ([PP_Doc])+                         -- "CodeSyntaxDump.ag"(line 102, column 33)+                         _lhsOppL =+                             _hdIpp : _tlIppL+                         -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                         _lhsOpp =+                             _hdIpp >-< _tlIpp+                         ( _hdIpp) =+                             (hd_ )+                         ( _tlIpp,_tlIppL) =+                             (tl_ )+                     in  ( _lhsOpp,_lhsOppL)) )+sem_CProductions_Nil :: T_CProductions+sem_CProductions_Nil  =+    (T_CProductions (let _lhsOppL :: ([PP_Doc])+                         _lhsOpp :: PP_Doc+                         -- "CodeSyntaxDump.ag"(line 103, column 33)+                         _lhsOppL =+                             []+                         -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                         _lhsOpp =+                             empty+                     in  ( _lhsOpp,_lhsOppL)) )+-- CRule -------------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative CChildVisit:+         child name           : {Name}+         child nt             : {Nonterminal}+         child nr             : {Int}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child isLast         : {Bool}+      alternative CRule:+         child name           : {Name}+         child isIn           : {Bool}+         child hasCode        : {Bool}+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child childnt        : {Maybe Nonterminal}+         child tp             : {Maybe Type}+         child pattern        : Pattern+         child rhs            : {[String]}+         child defines        : {Map Int (Name,Name,Maybe Type)}+         child owrt           : {Bool}+         child origin         : {String}+         child uses           : {Set (Name, Name)}+-}+-- cata+sem_CRule :: CRule ->+             T_CRule+sem_CRule (CChildVisit _name _nt _nr _inh _syn _isLast )  =+    (sem_CRule_CChildVisit _name _nt _nr _inh _syn _isLast )+sem_CRule (CRule _name _isIn _hasCode _nt _con _field _childnt _tp _pattern _rhs _defines _owrt _origin _uses )  =+    (sem_CRule_CRule _name _isIn _hasCode _nt _con _field _childnt _tp (sem_Pattern _pattern ) _rhs _defines _owrt _origin _uses )+-- semantic domain+newtype T_CRule = T_CRule (( PP_Doc))+data Inh_CRule = Inh_CRule {}+data Syn_CRule = Syn_CRule {pp_Syn_CRule :: PP_Doc}+wrap_CRule (T_CRule sem ) (Inh_CRule )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_CRule _lhsOpp ))+sem_CRule_CChildVisit :: Name ->+                         Nonterminal ->+                         Int ->+                         Attributes ->+                         Attributes ->+                         Bool ->+                         T_CRule+sem_CRule_CChildVisit name_ nt_ nr_ inh_ syn_ isLast_  =+    (T_CRule (let _lhsOpp :: PP_Doc+                  -- "CodeSyntaxDump.ag"(line 70, column 21)+                  _lhsOpp =+                      ppNestInfo ["CRule","CChildVisit"] [pp name_] [ppF "nt" $ pp nt_, ppF "nr" $ ppShow nr_, ppF "inh" $ ppMap inh_, ppF "syn" $ ppMap syn_, ppF "last" $ ppBool isLast_] []+              in  ( _lhsOpp)) )+sem_CRule_CRule :: Name ->+                   Bool ->+                   Bool ->+                   Nonterminal ->+                   Constructor ->+                   Name ->+                   (Maybe Nonterminal) ->+                   (Maybe Type) ->+                   T_Pattern ->+                   ([String]) ->+                   (Map Int (Name,Name,Maybe Type)) ->+                   Bool ->+                   String ->+                   (Set (Name, Name)) ->+                   T_CRule+sem_CRule_CRule name_ isIn_ hasCode_ nt_ con_ field_ childnt_ tp_ (T_Pattern pattern_ ) rhs_ defines_ owrt_ origin_ uses_  =+    (T_CRule (let _lhsOpp :: PP_Doc+                  _patternIcopy :: Pattern+                  _patternIpp :: PP_Doc+                  -- "CodeSyntaxDump.ag"(line 69, column 33)+                  _lhsOpp =+                      ppNestInfo ["CRule","CRule"] [pp name_] [ppF "isIn" $ ppBool isIn_, ppF "hasCode" $ ppBool hasCode_, ppF "nt" $ pp nt_, ppF "con" $ pp con_, ppF "field" $ pp field_, ppF "childnt" $ ppMaybeShow childnt_, ppF "tp" $ ppMaybeShow tp_, ppF "pattern" $ if isIn_ then pp "<no pat because In>" else _patternIpp, ppF "rhs" $ ppStrings rhs_, ppF "defines" $ ppVertexMap defines_, ppF "owrt" $ ppBool owrt_, ppF "origin" $ pp origin_] []+                  ( _patternIcopy,_patternIpp) =+                      (pattern_ )+              in  ( _lhsOpp)) )+-- CSegment ----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative CSegment:+         child inh            : {Attributes}+         child syn            : {Attributes}+-}+-- cata+sem_CSegment :: CSegment ->+                T_CSegment+sem_CSegment (CSegment _inh _syn )  =+    (sem_CSegment_CSegment _inh _syn )+-- semantic domain+newtype T_CSegment = T_CSegment (( PP_Doc))+data Inh_CSegment = Inh_CSegment {}+data Syn_CSegment = Syn_CSegment {pp_Syn_CSegment :: PP_Doc}+wrap_CSegment (T_CSegment sem ) (Inh_CSegment )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_CSegment _lhsOpp ))+sem_CSegment_CSegment :: Attributes ->+                         Attributes ->+                         T_CSegment+sem_CSegment_CSegment inh_ syn_  =+    (T_CSegment (let _lhsOpp :: PP_Doc+                     -- "CodeSyntaxDump.ag"(line 60, column 21)+                     _lhsOpp =+                         ppNestInfo ["CSegment","CSegment"] [] [ppF "inh" $ ppMap inh_, ppF "syn" $ ppMap syn_] []+                 in  ( _lhsOpp)) )+-- CSegments ---------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : CSegment+         child tl             : CSegments+      alternative Nil:+-}+-- cata+sem_CSegments :: CSegments ->+                 T_CSegments+sem_CSegments list  =+    (Prelude.foldr sem_CSegments_Cons sem_CSegments_Nil (Prelude.map sem_CSegment list) )+-- semantic domain+newtype T_CSegments = T_CSegments (( PP_Doc,([PP_Doc])))+data Inh_CSegments = Inh_CSegments {}+data Syn_CSegments = Syn_CSegments {pp_Syn_CSegments :: PP_Doc,ppL_Syn_CSegments :: [PP_Doc]}+wrap_CSegments (T_CSegments sem ) (Inh_CSegments )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_CSegments _lhsOpp _lhsOppL ))+sem_CSegments_Cons :: T_CSegment ->+                      T_CSegments ->+                      T_CSegments+sem_CSegments_Cons (T_CSegment hd_ ) (T_CSegments tl_ )  =+    (T_CSegments (let _lhsOppL :: ([PP_Doc])+                      _lhsOpp :: PP_Doc+                      _hdIpp :: PP_Doc+                      _tlIpp :: PP_Doc+                      _tlIppL :: ([PP_Doc])+                      -- "CodeSyntaxDump.ag"(line 98, column 33)+                      _lhsOppL =+                          _hdIpp : _tlIppL+                      -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                      _lhsOpp =+                          _hdIpp >-< _tlIpp+                      ( _hdIpp) =+                          (hd_ )+                      ( _tlIpp,_tlIppL) =+                          (tl_ )+                  in  ( _lhsOpp,_lhsOppL)) )+sem_CSegments_Nil :: T_CSegments+sem_CSegments_Nil  =+    (T_CSegments (let _lhsOppL :: ([PP_Doc])+                      _lhsOpp :: PP_Doc+                      -- "CodeSyntaxDump.ag"(line 99, column 33)+                      _lhsOppL =+                          []+                      -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                      _lhsOpp =+                          empty+                  in  ( _lhsOpp,_lhsOppL)) )+-- CVisit ------------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative CVisit:+         child inh            : {Attributes}+         child syn            : {Attributes}+         child vss            : Sequence+         child intra          : Sequence+         child ordered        : {Bool}+-}+-- cata+sem_CVisit :: CVisit ->+              T_CVisit+sem_CVisit (CVisit _inh _syn _vss _intra _ordered )  =+    (sem_CVisit_CVisit _inh _syn (sem_Sequence _vss ) (sem_Sequence _intra ) _ordered )+-- semantic domain+newtype T_CVisit = T_CVisit (( PP_Doc))+data Inh_CVisit = Inh_CVisit {}+data Syn_CVisit = Syn_CVisit {pp_Syn_CVisit :: PP_Doc}+wrap_CVisit (T_CVisit sem ) (Inh_CVisit )  =+    (let ( _lhsOpp) =+             (sem )+     in  (Syn_CVisit _lhsOpp ))+sem_CVisit_CVisit :: Attributes ->+                     Attributes ->+                     T_Sequence ->+                     T_Sequence ->+                     Bool ->+                     T_CVisit+sem_CVisit_CVisit inh_ syn_ (T_Sequence vss_ ) (T_Sequence intra_ ) ordered_  =+    (T_CVisit (let _lhsOpp :: PP_Doc+                   _vssIppL :: ([PP_Doc])+                   _intraIppL :: ([PP_Doc])+                   -- "CodeSyntaxDump.ag"(line 66, column 21)+                   _lhsOpp =+                       ppNestInfo ["CVisit","CVisit"] [] [ppF "inh" $ ppMap inh_, ppF "syn" $ ppMap syn_, ppF "sequence" $ ppVList _vssIppL, ppF "intra" $ ppVList _intraIppL, ppF "ordered" $ ppBool ordered_] []+                   ( _vssIppL) =+                       (vss_ )+                   ( _intraIppL) =+                       (intra_ )+               in  ( _lhsOpp)) )+-- CVisits -----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : CVisit+         child tl             : CVisits+      alternative Nil:+-}+-- cata+sem_CVisits :: CVisits ->+               T_CVisits+sem_CVisits list  =+    (Prelude.foldr sem_CVisits_Cons sem_CVisits_Nil (Prelude.map sem_CVisit list) )+-- semantic domain+newtype T_CVisits = T_CVisits (( PP_Doc,([PP_Doc])))+data Inh_CVisits = Inh_CVisits {}+data Syn_CVisits = Syn_CVisits {pp_Syn_CVisits :: PP_Doc,ppL_Syn_CVisits :: [PP_Doc]}+wrap_CVisits (T_CVisits sem ) (Inh_CVisits )  =+    (let ( _lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_CVisits _lhsOpp _lhsOppL ))+sem_CVisits_Cons :: T_CVisit ->+                    T_CVisits ->+                    T_CVisits+sem_CVisits_Cons (T_CVisit hd_ ) (T_CVisits tl_ )  =+    (T_CVisits (let _lhsOppL :: ([PP_Doc])+                    _lhsOpp :: PP_Doc+                    _hdIpp :: PP_Doc+                    _tlIpp :: PP_Doc+                    _tlIppL :: ([PP_Doc])+                    -- "CodeSyntaxDump.ag"(line 90, column 33)+                    _lhsOppL =+                        _hdIpp : _tlIppL+                    -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                    _lhsOpp =+                        _hdIpp >-< _tlIpp+                    ( _hdIpp) =+                        (hd_ )+                    ( _tlIpp,_tlIppL) =+                        (tl_ )+                in  ( _lhsOpp,_lhsOppL)) )+sem_CVisits_Nil :: T_CVisits+sem_CVisits_Nil  =+    (T_CVisits (let _lhsOppL :: ([PP_Doc])+                    _lhsOpp :: PP_Doc+                    -- "CodeSyntaxDump.ag"(line 91, column 33)+                    _lhsOppL =+                        []+                    -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                    _lhsOpp =+                        empty+                in  ( _lhsOpp,_lhsOppL)) )+-- Pattern -----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         pp                   : PP_Doc+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local copy        : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts )  =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+sem_Pattern (Constr _name _pats )  =+    (sem_Pattern_Constr _name (sem_Patterns _pats ) )+sem_Pattern (Product _pos _pats )  =+    (sem_Pattern_Product _pos (sem_Patterns _pats ) )+sem_Pattern (Underscore _pos )  =+    (sem_Pattern_Underscore _pos )+-- semantic domain+newtype T_Pattern = T_Pattern (( Pattern,PP_Doc))+data Inh_Pattern = Inh_Pattern {}+data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: Pattern,pp_Syn_Pattern :: PP_Doc}+wrap_Pattern (T_Pattern sem ) (Inh_Pattern )  =+    (let ( _lhsOcopy,_lhsOpp) =+             (sem )+     in  (Syn_Pattern _lhsOcopy _lhsOpp ))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ )  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    _patIcopy :: Pattern+                    _patIpp :: PP_Doc+                    _partsIcopy :: Patterns+                    _partsIpp :: PP_Doc+                    _partsIppL :: ([PP_Doc])+                    -- "CodeSyntaxDump.ag"(line 75, column 33)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Alias"] [pp field_, pp attr_] [ppF "pat" $ _patIpp] []+                    -- self rule+                    _copy =+                        Alias field_ attr_ _patIcopy _partsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patIcopy,_patIpp) =+                        (pat_ )+                    ( _partsIcopy,_partsIpp,_partsIppL) =+                        (parts_ )+                in  ( _lhsOcopy,_lhsOpp)) )+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_ )  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIpp :: PP_Doc+                    _patsIppL :: ([PP_Doc])+                    -- "CodeSyntaxDump.ag"(line 73, column 33)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Constr"] [pp name_] [ppF "pats" $ ppVList _patsIppL] []+                    -- self rule+                    _copy =+                        Constr name_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIpp,_patsIppL) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOpp)) )+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_ )  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIpp :: PP_Doc+                    _patsIppL :: ([PP_Doc])+                    -- "CodeSyntaxDump.ag"(line 74, column 33)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Product"] [ppShow pos_] [ppF "pats" $ ppVList _patsIppL] []+                    -- self rule+                    _copy =+                        Product pos_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIpp,_patsIppL) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOpp)) )+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_  =+    (T_Pattern (let _lhsOpp :: PP_Doc+                    _lhsOcopy :: Pattern+                    -- "CodeSyntaxDump.ag"(line 76, column 25)+                    _lhsOpp =+                        ppNestInfo ["Pattern","Underscore"] [ppShow pos_] [] []+                    -- self rule+                    _copy =+                        Underscore pos_+                    -- self rule+                    _lhsOcopy =+                        _copy+                in  ( _lhsOcopy,_lhsOpp)) )+-- Patterns ----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         pp                   : PP_Doc+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+      alternative Nil:+         visit 0:+            local copy        : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list  =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns (( Patterns,PP_Doc,([PP_Doc])))+data Inh_Patterns = Inh_Patterns {}+data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: Patterns,pp_Syn_Patterns :: PP_Doc,ppL_Syn_Patterns :: [PP_Doc]}+wrap_Patterns (T_Patterns sem ) (Inh_Patterns )  =+    (let ( _lhsOcopy,_lhsOpp,_lhsOppL) =+             (sem )+     in  (Syn_Patterns _lhsOcopy _lhsOpp _lhsOppL ))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =+    (T_Patterns (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     _lhsOcopy :: Patterns+                     _hdIcopy :: Pattern+                     _hdIpp :: PP_Doc+                     _tlIcopy :: Patterns+                     _tlIpp :: PP_Doc+                     _tlIppL :: ([PP_Doc])+                     -- "CodeSyntaxDump.ag"(line 82, column 33)+                     _lhsOppL =+                         _hdIpp : _tlIppL+                     -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                     _lhsOpp =+                         _hdIpp >-< _tlIpp+                     -- self rule+                     _copy =+                         (:) _hdIcopy _tlIcopy+                     -- self rule+                     _lhsOcopy =+                         _copy+                     ( _hdIcopy,_hdIpp) =+                         (hd_ )+                     ( _tlIcopy,_tlIpp,_tlIppL) =+                         (tl_ )+                 in  ( _lhsOcopy,_lhsOpp,_lhsOppL)) )+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (let _lhsOppL :: ([PP_Doc])+                     _lhsOpp :: PP_Doc+                     _lhsOcopy :: Patterns+                     -- "CodeSyntaxDump.ag"(line 83, column 33)+                     _lhsOppL =+                         []+                     -- use rule "CodeSyntaxDump.ag"(line 44, column 40)+                     _lhsOpp =+                         empty+                     -- self rule+                     _copy =+                         []+                     -- self rule+                     _lhsOcopy =+                         _copy+                 in  ( _lhsOcopy,_lhsOpp,_lhsOppL)) )+-- Sequence ----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         ppL                  : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : CRule+         child tl             : Sequence+      alternative Nil:+-}+-- cata+sem_Sequence :: Sequence ->+                T_Sequence+sem_Sequence list  =+    (Prelude.foldr sem_Sequence_Cons sem_Sequence_Nil (Prelude.map sem_CRule list) )+-- semantic domain+newtype T_Sequence = T_Sequence (( ([PP_Doc])))+data Inh_Sequence = Inh_Sequence {}+data Syn_Sequence = Syn_Sequence {ppL_Syn_Sequence :: [PP_Doc]}+wrap_Sequence (T_Sequence sem ) (Inh_Sequence )  =+    (let ( _lhsOppL) =+             (sem )+     in  (Syn_Sequence _lhsOppL ))+sem_Sequence_Cons :: T_CRule ->+                     T_Sequence ->+                     T_Sequence+sem_Sequence_Cons (T_CRule hd_ ) (T_Sequence tl_ )  =+    (T_Sequence (let _lhsOppL :: ([PP_Doc])+                     _hdIpp :: PP_Doc+                     _tlIppL :: ([PP_Doc])+                     -- "CodeSyntaxDump.ag"(line 86, column 33)+                     _lhsOppL =+                         _hdIpp : _tlIppL+                     ( _hdIpp) =+                         (hd_ )+                     ( _tlIppL) =+                         (tl_ )+                 in  ( _lhsOppL)) )+sem_Sequence_Nil :: T_Sequence+sem_Sequence_Nil  =+    (T_Sequence (let _lhsOppL :: ([PP_Doc])+                     -- "CodeSyntaxDump.ag"(line 87, column 33)+                     _lhsOppL =+                         []+                 in  ( _lhsOppL)) )
+ src-derived/ConcreteSyntax.hs view
@@ -0,0 +1,197 @@++-- UUAGC 0.9.5 (ConcreteSyntax.ag)+module ConcreteSyntax where++import UU.Scanner.Position (Pos)+import Patterns   (Pattern)+import Expression (Expression)+import CommonTypes+-- AG ----------------------------------------------------------+{-+   alternatives:+      alternative AG:+         child elems          : Elems+-}+data AG = AG (Elems) +-- Alt ---------------------------------------------------------+{-+   alternatives:+      alternative Alt:+         child pos            : {Pos}+         child names          : ConstructorSet+         child fields         : {Fields}+-}+data Alt = Alt (Pos) (ConstructorSet) (Fields) +-- Alts --------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Alt+         child tl             : Alts+      alternative Nil:+-}+type Alts = [Alt]+-- Attrs -------------------------------------------------------+{-+   alternatives:+      alternative Attrs:+         child pos            : {Pos}+         child inh            : {AttrNames}+         child chn            : {AttrNames}+         child syn            : {AttrNames}+-}+data Attrs = Attrs (Pos) (AttrNames) (AttrNames) (AttrNames) +-- ConstructorSet ----------------------------------------------+{-+   alternatives:+      alternative CAll:+      alternative CDifference:+         child set1           : ConstructorSet+         child set2           : ConstructorSet+      alternative CName:+         child name           : {Constructor}+      alternative CUnion:+         child set1           : ConstructorSet+         child set2           : ConstructorSet+-}+data ConstructorSet = CAll +                    | CDifference (ConstructorSet) (ConstructorSet) +                    | CName (Constructor) +                    | CUnion (ConstructorSet) (ConstructorSet) +-- Elem --------------------------------------------------------+{-+   alternatives:+      alternative Attr:+         child pos            : {Pos}+         child names          : NontSet+         child attrs          : Attrs+      alternative Data:+         child pos            : {Pos}+         child names          : NontSet+         child attrs          : Attrs+         child alts           : Alts+         child ext            : {Bool}+      alternative Deriving:+         child pos            : {Pos}+         child set            : NontSet+         child classes        : {[Name]}+      alternative Module:+         child pos            : {Pos}+         child name           : {String}+         child exports        : {String}+         child imports        : {String}+      alternative Pragma:+         child pos            : {Pos}+         child names          : {[Name]}+      alternative Sem:+         child pos            : {Pos}+         child names          : NontSet+         child attrs          : Attrs+         child alts           : SemAlts+      alternative Set:+         child pos            : {Pos}+         child name           : {Name}+         child set            : NontSet+      alternative Txt:+         child pos            : {Pos}+         child name           : {Name}+         child lines          : {[String]}+      alternative Type:+         child pos            : {Pos}+         child name           : {Nonterminal}+         child type           : {ComplexType}+      alternative Wrapper:+         child pos            : {Pos}+         child set            : NontSet+-}+data Elem = Attr (Pos) (NontSet) (Attrs) +          | Data (Pos) (NontSet) (Attrs) (Alts) (Bool) +          | Deriving (Pos) (NontSet) ([Name]) +          | Module (Pos) (String) (String) (String) +          | Pragma (Pos) ([Name]) +          | Sem (Pos) (NontSet) (Attrs) (SemAlts) +          | Set (Pos) (Name) (NontSet) +          | Txt (Pos) (Name) ([String]) +          | Type (Pos) (Nonterminal) (ComplexType) +          | Wrapper (Pos) (NontSet) +-- Elems -------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Elem+         child tl             : Elems+      alternative Nil:+-}+type Elems = [Elem]+-- NontSet -----------------------------------------------------+{-+   alternatives:+      alternative All:+      alternative Difference:+         child set1           : NontSet+         child set2           : NontSet+      alternative Intersect:+         child set1           : NontSet+         child set2           : NontSet+      alternative NamedSet:+         child name           : {Nonterminal}+      alternative Path:+         child from           : {Nonterminal}+         child to             : {Nonterminal}+      alternative Union:+         child set1           : NontSet+         child set2           : NontSet+-}+data NontSet = All +             | Difference (NontSet) (NontSet) +             | Intersect (NontSet) (NontSet) +             | NamedSet (Nonterminal) +             | Path (Nonterminal) (Nonterminal) +             | Union (NontSet) (NontSet) +-- SemAlt ------------------------------------------------------+{-+   alternatives:+      alternative SemAlt:+         child pos            : {Pos}+         child constructorSet : ConstructorSet+         child rules          : SemDefs+-}+data SemAlt = SemAlt (Pos) (ConstructorSet) (SemDefs) +-- SemAlts -----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : SemAlt+         child tl             : SemAlts+      alternative Nil:+-}+type SemAlts = [SemAlt]+-- SemDef ------------------------------------------------------+{-+   alternatives:+      alternative AttrOrderBefore:+         child before         : {(Identifier,Identifier)}+         child after          : {(Identifier,Identifier)}+      alternative Def:+         child pattern        : {Pattern}+         child rhs            : {Expression}+         child owrt           : {Bool}+      alternative SemPragma:+         child names          : {[Name]}+      alternative TypeDef:+         child ident          : {Identifier}+         child tp             : {Type}+-}+data SemDef = AttrOrderBefore ((Identifier,Identifier)) ((Identifier,Identifier)) +            | Def (Pattern) (Expression) (Bool) +            | SemPragma ([Name]) +            | TypeDef (Identifier) (Type) +-- SemDefs -----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : SemDef+         child tl             : SemDefs+      alternative Nil:+-}+type SemDefs = [SemDef]
+ src-derived/DeclBlocks.hs view
@@ -0,0 +1,25 @@++-- UUAGC 0.9.5 (DeclBlocks.ag)+module DeclBlocks where++import Code (Decl,Expr)+-- DeclBlocks --------------------------------------------------+{-+   alternatives:+      alternative DeclBlock:+         child defs           : {[Decl]}+         child visit          : {Decl}+         child next           : DeclBlocks+      alternative DeclTerminator:+         child defs           : {[Decl]}+         child result         : {Expr}+-}+data DeclBlocks = DeclBlock ([Decl]) (Decl) (DeclBlocks) +                | DeclTerminator ([Decl]) (Expr) +-- DeclBlocksRoot ----------------------------------------------+{-+   alternatives:+      alternative DeclBlocksRoot:+         child blocks         : DeclBlocks+-}+data DeclBlocksRoot = DeclBlocksRoot (DeclBlocks) 
+ src-derived/DefaultRules.hs view
@@ -0,0 +1,2034 @@++-- UUAGC 0.9.5 (DefaultRules.ag)+module DefaultRules where++import qualified List (delete,intersperse)++import qualified Data.Set as Set+import qualified Data.Map as Map+import Data.Map(Map)+import qualified UU.DData.Seq as Seq+import UU.DData.Seq(Seq,(<>))+import UU.Scanner.Position(noPos)+import Pretty+import Maybe++import AbstractSyntax+import ErrorMessages++import Options(Options,modcopy,rename)++-- AbstractSyntax.ag imports+import Data.Set(Set)+import Data.Map(Map)+import Patterns    (Pattern(..),Patterns)+import Expression  (Expression(..))+import CommonTypes++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)++fieldName n       = '@' : getName n+	+locName n         = '@' : getName n++attrName fld attr+ | fld == _LOC    = '@' :                       getName attr + | otherwise      = '@' : getName fld ++ "." ++ getName attr++_ACHILD = Ident "(" noPos -- hack+	+	+getConName typeSyns rename nt con1 + | nt `elem` map fst typeSyns  =  synonym+ | otherwise                   =  normalName+ where con                            = getName con1+       normalName | rename            = getName nt++"_"++ con+                  | otherwise         =  con+       synonym    | con == "Cons"     = "(:)"+                  | con == "Nil"      = "[]"+                  | con == "Just"     = "Just"+                  | con == "Nothing"  = "Nothing"+                  | otherwise         = normalName++++concatSeq = foldr Seq.append Seq.empty++splitAttrs :: Map Name a -> [Name] -> ([(Name,a)],[Name])	  -- a used as (String,String)+splitAttrs _      []           +  =  ([],[])+splitAttrs useMap (n:rest) +  =  let (uses,normals) = splitAttrs useMap rest+     in case Map.lookup n useMap of+          Just x  -> ((n,x):uses ,   normals )       +          Nothing -> (      uses , n:normals )++removeDefined ::  Set (Name,Name) -> (Name,Attributes) -> (Name,[Name])+removeDefined defined (fld,as) +  = ( fld+    , [ a +      | a <- Map.keys as+      , not (Set.member (fld,a) defined) +      ]+    )+++	+	+	+deprecatedCopyRuleError nt con fld a+ = let mesg = +                "In the definitions for alternative" +            >#< getName con +            >#< "of nonterminal" +            >#< getName nt +            >|< "," +            >-< "the value of field" +            >#< getName a  +            >#< "is copied by a copy-rule."                                    +            >-< "Copying the value of a field using a copy-rule is deprecated"+            >-< "Please add the following lines to your code:"+            >-< (    "SEM" +                >#< getName nt+                >-< indent 2 (      "|" +                             >#< getName con +                             >#< getName fld +                             >#< "." +                             >#< a +                             >#< "=" +                             >#< "@" +                             >|< a+                             )+                )  +    in  CustomError True (getPos a) mesg+	+	+missingRuleErrorExpr nt con fld a+ = "error \"missing rule: " +   ++ show nt  ++ "." ++ show con ++ "." +   ++ show fld ++ "." ++ show a   ++ "\""+	+	+	+makeRule :: (Name,Name) -> Expression -> String -> Rule+makeRule (f1,a1) expr origin + = Rule (Alias f1 a1 (Underscore noPos) []) +        expr +        False +        origin+++useRule :: Set Name -> [(Name,Attributes)] -> (Name,(String,String,String)) -> Rule+useRule locals ch_outs (n,(op,e,pos)) + =  let elems = [ fld +                | (fld,as) <- ch_outs+                , Map.member n as+                ]+                +        expr | Set.member n locals  =  attrName _LOC n+             | null elems           =  e+             | otherwise            =  foldr1 (\x y -> x ++ " " ++ op ++ " " ++ y) +                                              (map (flip attrName n) elems)+             +    in makeRule (_LHS,n) +                (Expression noPos expr) +                ("use rule " ++ pos)+++++selfRule lhsNecLoc attr x   + = let expr | lhsNecLoc  = locName attr+            | otherwise  = x+     +   in makeRule (if lhsNecLoc then _LHS else _LOC,attr)+               (Expression noPos expr)+               "self rule"+               ++++concatRE rsess = let (rss,ess) = unzip rsess+                 in (concat rss, concatSeq ess)+++copyRule :: Name -> Name -> Bool -> Set Name -> (Map Name Name, (Name,[Name])) -> ([Rule], Seq Error)+copyRule nt con modcopy locals (env,(fld,as)) + = concatRE (map copyRu as)+ + where +       copyRu a+           = ( [ makeRule (fld,a) +                          (Expression noPos expr)+                          (cruletxt sel)+               ]+             , err+             )+                +        where +              sel +               |    not modcopy +                 && Set.member a locals  =  Just _LOC+               | otherwise               =  Map.lookup a env++              (expr,err) +               = case sel of+                  Nothing         -> ( missingRuleErrorExpr nt con fld a+                                     , Seq.single (MissingRule nt con fld a)+                                     )+                  Just f +                   | f == _ACHILD -> ( fieldName a+                                     , Seq.single (deprecatedCopyRuleError nt con fld a)+                                     )+                   | otherwise    -> ( attrName f a+                                     , Seq.empty+                                     )+                                            +              cruletxt sel +               | local                            = "copy rule (from local)"+               | deprChild                        = "deprecated child copy"+               | Set.member a locals && nonlocal  = "modified copy rule"+               | incoming && outgoing             = "copy rule (chain)"+               | incoming                         = "copy rule (down)"+               | outgoing                         = "copy rule (up)"+               | otherwise                        = "copy rule (chain)"+                where outgoing  =  fld == _LHS+                      incoming  =  maybe False (== _LHS)    sel+                      nonlocal  =  maybe False (/= _LOC)    sel+                      local     =  maybe False (== _LOC)    sel+                      deprChild =  maybe False (== _ACHILD) sel++{- +multiRule replaces+  loc.(a,b) = e+by  +  loc.tup1  = e+  loc.(a,_) = @loc.tup1+  loc.(_,b) = @loc.tup1+It needs to thread a unique number for inventing names for the tuples.++It also works for nested tuples:+  loc.(a,(b,c)) = e+becomes+  loc.tup1      = e+  loc.(a,_)     = @loc.tup1+  loc.(_,tup2)  = @loc.tup1+  loc.(b,_)     = @loc.tup2+  loc.(_,c)     = @loc.tup2+-}++multiRule :: Rule -> Int -> ([Rule], Int)	+multiRule (Rule pat expr owrt origin) uniq+  =  let f :: (Pattern->Pattern) -> Expression -> Pattern -> Int -> (Pattern, ([Rule], Int))+         f w e (Product pos pats) n +           = let freshName = Ident ("_tup" ++ show n) pos +                 freshExpr = Expression pos (attrName _LOC freshName)+                 freshPat  = Alias _LOC freshName (Underscore pos) pats+                 a = length pats - 1+                 us b p = Product pos (replicate (a-b) (Underscore pos) ++ [p] ++ replicate b (Underscore pos))+                 g :: Pattern -> ([Pattern],[Rule],Int) -> ([Pattern],[Rule],Int)+                 g p (xs1,rs1,n1)   = let (x2,(rs2,n2)) = f (us (length xs1)) freshExpr p n1+                                      in  (x2:xs1, rs2++rs1, n2)+                 (xs9,rs9,n9) = foldr g ([], [], n+1) pats+             in  ( freshPat+                 , ( Rule (w freshPat) e owrt origin : rs9+                   , n9+                   )+                 )+         f w e p n +           = ( p+             , ( [Rule (w p) e owrt origin]+               , n+               )+             )+     in snd (f id expr pat uniq)+++isDefined :: Map Name Attributes -> Identifier -> Identifier -> Bool+isDefined mp fld nm+  = Map.member nm $ Map.findWithDefault Map.empty fld mp++-- check that for a dependency a < b, that a is an In attribute+isInAttribute :: [(Name,Attributes)] -> Identifier -> Identifier -> Bool+isInAttribute allSyns fld nm+  | fld == _INST || fld == _LOC || fld == _LHS+      = True+  | otherwise  -- is nm it a synthesized attribute of fld?+      = maybe False (Map.member nm) (lookup fld allSyns)+-- Alternative -------------------------------------------------+{-+   visit 0:+      inherited attributes:+         cr                   : Bool+         inh                  : Attributes+         manualAttrOrderMap   : AttrOrderMap+         nonterminals         : Set Nonterminal+         nt                   : Nonterminal+         o_rename             : Bool+         syn                  : Attributes+         typeSyns             : TypeSyns+         useMap               : Map Name (String,String,String)+      chained attribute:+         uniq                 : Int+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Alternative:+         child con            : {Constructor}+         child children       : Children+         child rules          : Rules+         child typeSigs       : TypeSigs+         visit 0:+            local _tup1       : _+            local newRls      : _+            local errs        : _+            local orderDeps   : _+            local allAttrsInScope : _+            local invalidOrderDepsErrors : _+            local undefinedAttributeInDepsErrors : _+            local orderErrs   : _+            local output      : _+-}+-- cata+sem_Alternative :: Alternative ->+                   T_Alternative+sem_Alternative (Alternative _con _children _rules _typeSigs )  =+    (sem_Alternative_Alternative _con (sem_Children _children ) (sem_Rules _rules ) (sem_TypeSigs _typeSigs ) )+-- semantic domain+newtype T_Alternative = T_Alternative (Bool ->+                                       Attributes ->+                                       AttrOrderMap ->+                                       (Set Nonterminal) ->+                                       Nonterminal ->+                                       Bool ->+                                       Attributes ->+                                       TypeSyns ->+                                       Int ->+                                       (Map Name (String,String,String)) ->+                                       ( (Seq Error),Alternative,Int))+data Inh_Alternative = Inh_Alternative {cr_Inh_Alternative :: Bool,inh_Inh_Alternative :: Attributes,manualAttrOrderMap_Inh_Alternative :: AttrOrderMap,nonterminals_Inh_Alternative :: Set Nonterminal,nt_Inh_Alternative :: Nonterminal,o_rename_Inh_Alternative :: Bool,syn_Inh_Alternative :: Attributes,typeSyns_Inh_Alternative :: TypeSyns,uniq_Inh_Alternative :: Int,useMap_Inh_Alternative :: Map Name (String,String,String)}+data Syn_Alternative = Syn_Alternative {errors_Syn_Alternative :: Seq Error,output_Syn_Alternative :: Alternative,uniq_Syn_Alternative :: Int}+wrap_Alternative (T_Alternative sem ) (Inh_Alternative _lhsIcr _lhsIinh _lhsImanualAttrOrderMap _lhsInonterminals _lhsInt _lhsIo_rename _lhsIsyn _lhsItypeSyns _lhsIuniq _lhsIuseMap )  =+    (let ( _lhsOerrors,_lhsOoutput,_lhsOuniq) =+             (sem _lhsIcr _lhsIinh _lhsImanualAttrOrderMap _lhsInonterminals _lhsInt _lhsIo_rename _lhsIsyn _lhsItypeSyns _lhsIuniq _lhsIuseMap )+     in  (Syn_Alternative _lhsOerrors _lhsOoutput _lhsOuniq ))+sem_Alternative_Alternative :: Constructor ->+                               T_Children ->+                               T_Rules ->+                               T_TypeSigs ->+                               T_Alternative+sem_Alternative_Alternative con_ (T_Children children_ ) (T_Rules rules_ ) (T_TypeSigs typeSigs_ )  =+    (T_Alternative (\ _lhsIcr+                      _lhsIinh+                      _lhsImanualAttrOrderMap+                      _lhsInonterminals+                      _lhsInt+                      _lhsIo_rename+                      _lhsIsyn+                      _lhsItypeSyns+                      _lhsIuniq+                      _lhsIuseMap ->+                        (let _rulesOcon :: Constructor+                             _childrenOcon :: Constructor+                             _lhsOerrors :: (Seq Error)+                             _lhsOoutput :: Alternative+                             _lhsOuniq :: Int+                             _childrenOcr :: Bool+                             _childrenOnt :: Nonterminal+                             _rulesOnt :: Nonterminal+                             _rulesOuniq :: Int+                             _childrenIerrors :: (Seq Error)+                             _childrenIfields :: ([(Name,Type,Bool)])+                             _childrenIinputs :: ([(Name, Attributes)])+                             _childrenIoutput :: Children+                             _childrenIoutputs :: ([(Name, Attributes)])+                             _rulesIdefinedAttrs :: (Set (Name,Name))+                             _rulesIerrors :: (Seq Error)+                             _rulesIlocals :: (Set Name)+                             _rulesIoutput :: Rules+                             _rulesIuniq :: Int+                             _typeSigsIoutput :: TypeSigs+                             -- "DefaultRules.ag"(line 135, column 17)+                             _rulesOcon =+                                 con_+                             -- "DefaultRules.ag"(line 136, column 17)+                             _childrenOcon =+                                 con_+                             -- "DefaultRules.ag"(line 295, column 4)+                             _lhsOerrors =+                                 _childrenIerrors <> _errs <> _rulesIerrors <> _orderErrs+                             -- "DefaultRules.ag"(line 297, column 8)+                             __tup1 =+                                 let locals       = _rulesIlocals+                                     initenv      = Map.fromList (  [ (a,_ACHILD)+                                                                    | (a,_,_) <- _childrenIfields+                                                                    ]+                                                                 ++ attrs(_LHS, _lhsIinh)+                                                                 ++ [ (a,_LOC)+                                                                    |  a <- Set.toList locals+                                                                    ]+                                                                 )+                                     attrs (n,as) = [ (a,n) | a <- Map.keys as ]+                                     envs       = scanl (flip Map.union)+                                                        initenv+                                                        (map (Map.fromList . attrs ) _childrenIoutputs)+                                     child_envs = init envs+                                     lhs_env    = last envs+                                     (selfAttrs, normalAttrs)+                                       = Map.partition (==NT _SELF) _lhsIsyn+                                     (_,undefAttrs)+                                       = removeDefined _rulesIdefinedAttrs (_LHS, normalAttrs)+                                     (useAttrs,others)+                                       = splitAttrs _lhsIuseMap undefAttrs+                                     (rules1, errors1)+                                       = concatRE $ map (copyRule _lhsInt con_ _lhsIcr locals)+                                                        (zip envs (map (removeDefined _rulesIdefinedAttrs) _childrenIinputs))+                                     uRules+                                       = map (useRule locals _childrenIoutputs) useAttrs+                                     selfLocRules+                                       =  [ selfRule False attr (constructor [childSelf attr nm tp | (nm,tp,ho) <- _childrenIfields, not ho])+                                          | attr <- Map.keys selfAttrs+                                          , not (Set.member attr locals)+                                          ]+                                          where+                                            childSelf self nm tp+                                              = case tp of NT nt                           -> attrName nm self+                                                           _      | nm `Set.member` locals -> locname nm+                                                                  | otherwise              -> fieldName nm+                                            constructor fs+                                             | getName con_ == "Tuple" && _lhsInt `elem` map fst _lhsItypeSyns+                                               = "(" ++ concat (List.intersperse "," fs) ++ ")"+                                             | otherwise+                                               = getConName _lhsItypeSyns _lhsIo_rename _lhsInt con_ ++ " " ++ unwords fs+                                     selfRules+                                       = [ selfRule True attr undefined+                                         | attr <- Map.keys selfAttrs+                                         , not (Set.member (_LHS,attr) _rulesIdefinedAttrs)+                                         ]+                                     (rules5, errs5)+                                       = copyRule _lhsInt+                                                  con_+                                                  _lhsIcr+                                                  locals+                                                  (lhs_env, (_LHS, others))+                                 in (uRules++selfLocRules++selfRules++rules5++rules1, errors1<>errs5)+                             -- "DefaultRules.ag"(line 297, column 8)+                             (_newRls,_) =+                                 __tup1+                             -- "DefaultRules.ag"(line 297, column 8)+                             (_,_errs) =+                                 __tup1+                             -- "DefaultRules.ag"(line 413, column 17)+                             _lhsOoutput =+                                 Alternative con_ _childrenIoutput (_rulesIoutput ++ _newRls) _typeSigsIoutput+                             -- "DefaultRules.ag"(line 484, column 7)+                             _orderDeps =+                                 Set.toList $ Map.findWithDefault Set.empty con_ $ Map.findWithDefault Map.empty _lhsInt _lhsImanualAttrOrderMap+                             -- "DefaultRules.ag"(line 486, column 7)+                             _allAttrsInScope =+                                 Map.fromList ( [ (_LHS, _lhsIsyn `Map.union` _lhsIinh)+                                                , (_LOC, Map.fromList [ (l,Haskell "LOC") | l <- Set.toList _rulesIlocals]) ]+                                              ++ _childrenIinputs+                                              ++ _childrenIoutputs+                                              )+                             -- "DefaultRules.ag"(line 493, column 7)+                             _invalidOrderDepsErrors =+                                 [ ErroneousOrder _lhsInt con_ dep+                                 | dep@(Dependency (fld,nm) _) <- _orderDeps+                                 , not $ isInAttribute _childrenIoutputs fld nm+                                 ]+                             -- "DefaultRules.ag"(line 499, column 7)+                             _undefinedAttributeInDepsErrors =+                                 [ UndefAttr _lhsInt con_ fld nm+                                 | (fld,nm) <- concatMap (\(Dependency a b) -> [a,b]) $ _orderDeps+                                 , not $ isDefined _allAttrsInScope     fld nm+                                 ]+                             -- "DefaultRules.ag"(line 505, column 7)+                             _orderErrs =+                                 if null _undefinedAttributeInDepsErrors+                                 then Seq.fromList _invalidOrderDepsErrors+                                 else Seq.fromList _undefinedAttributeInDepsErrors+                             -- self rule+                             _output =+                                 Alternative con_ _childrenIoutput _rulesIoutput _typeSigsIoutput+                             -- copy rule (up)+                             _lhsOuniq =+                                 _rulesIuniq+                             -- copy rule (down)+                             _childrenOcr =+                                 _lhsIcr+                             -- copy rule (down)+                             _childrenOnt =+                                 _lhsInt+                             -- copy rule (down)+                             _rulesOnt =+                                 _lhsInt+                             -- copy rule (down)+                             _rulesOuniq =+                                 _lhsIuniq+                             ( _childrenIerrors,_childrenIfields,_childrenIinputs,_childrenIoutput,_childrenIoutputs) =+                                 (children_ _childrenOcon _childrenOcr _childrenOnt )+                             ( _rulesIdefinedAttrs,_rulesIerrors,_rulesIlocals,_rulesIoutput,_rulesIuniq) =+                                 (rules_ _rulesOcon _rulesOnt _rulesOuniq )+                             ( _typeSigsIoutput) =+                                 (typeSigs_ )+                         in  ( _lhsOerrors,_lhsOoutput,_lhsOuniq))) )+-- Alternatives ------------------------------------------------+{-+   visit 0:+      inherited attributes:+         cr                   : Bool+         inh                  : Attributes+         manualAttrOrderMap   : AttrOrderMap+         nonterminals         : Set Nonterminal+         nt                   : Nonterminal+         o_rename             : Bool+         syn                  : Attributes+         typeSyns             : TypeSyns+         useMap               : Map Name (String,String,String)+      chained attribute:+         uniq                 : Int+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Alternative+         child tl             : Alternatives+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Alternatives :: Alternatives ->+                    T_Alternatives+sem_Alternatives list  =+    (Prelude.foldr sem_Alternatives_Cons sem_Alternatives_Nil (Prelude.map sem_Alternative list) )+-- semantic domain+newtype T_Alternatives = T_Alternatives (Bool ->+                                         Attributes ->+                                         AttrOrderMap ->+                                         (Set Nonterminal) ->+                                         Nonterminal ->+                                         Bool ->+                                         Attributes ->+                                         TypeSyns ->+                                         Int ->+                                         (Map Name (String,String,String)) ->+                                         ( (Seq Error),Alternatives,Int))+data Inh_Alternatives = Inh_Alternatives {cr_Inh_Alternatives :: Bool,inh_Inh_Alternatives :: Attributes,manualAttrOrderMap_Inh_Alternatives :: AttrOrderMap,nonterminals_Inh_Alternatives :: Set Nonterminal,nt_Inh_Alternatives :: Nonterminal,o_rename_Inh_Alternatives :: Bool,syn_Inh_Alternatives :: Attributes,typeSyns_Inh_Alternatives :: TypeSyns,uniq_Inh_Alternatives :: Int,useMap_Inh_Alternatives :: Map Name (String,String,String)}+data Syn_Alternatives = Syn_Alternatives {errors_Syn_Alternatives :: Seq Error,output_Syn_Alternatives :: Alternatives,uniq_Syn_Alternatives :: Int}+wrap_Alternatives (T_Alternatives sem ) (Inh_Alternatives _lhsIcr _lhsIinh _lhsImanualAttrOrderMap _lhsInonterminals _lhsInt _lhsIo_rename _lhsIsyn _lhsItypeSyns _lhsIuniq _lhsIuseMap )  =+    (let ( _lhsOerrors,_lhsOoutput,_lhsOuniq) =+             (sem _lhsIcr _lhsIinh _lhsImanualAttrOrderMap _lhsInonterminals _lhsInt _lhsIo_rename _lhsIsyn _lhsItypeSyns _lhsIuniq _lhsIuseMap )+     in  (Syn_Alternatives _lhsOerrors _lhsOoutput _lhsOuniq ))+sem_Alternatives_Cons :: T_Alternative ->+                         T_Alternatives ->+                         T_Alternatives+sem_Alternatives_Cons (T_Alternative hd_ ) (T_Alternatives tl_ )  =+    (T_Alternatives (\ _lhsIcr+                       _lhsIinh+                       _lhsImanualAttrOrderMap+                       _lhsInonterminals+                       _lhsInt+                       _lhsIo_rename+                       _lhsIsyn+                       _lhsItypeSyns+                       _lhsIuniq+                       _lhsIuseMap ->+                         (let _lhsOerrors :: (Seq Error)+                              _lhsOoutput :: Alternatives+                              _lhsOuniq :: Int+                              _hdOcr :: Bool+                              _hdOinh :: Attributes+                              _hdOmanualAttrOrderMap :: AttrOrderMap+                              _hdOnonterminals :: (Set Nonterminal)+                              _hdOnt :: Nonterminal+                              _hdOo_rename :: Bool+                              _hdOsyn :: Attributes+                              _hdOtypeSyns :: TypeSyns+                              _hdOuniq :: Int+                              _hdOuseMap :: (Map Name (String,String,String))+                              _tlOcr :: Bool+                              _tlOinh :: Attributes+                              _tlOmanualAttrOrderMap :: AttrOrderMap+                              _tlOnonterminals :: (Set Nonterminal)+                              _tlOnt :: Nonterminal+                              _tlOo_rename :: Bool+                              _tlOsyn :: Attributes+                              _tlOtypeSyns :: TypeSyns+                              _tlOuniq :: Int+                              _tlOuseMap :: (Map Name (String,String,String))+                              _hdIerrors :: (Seq Error)+                              _hdIoutput :: Alternative+                              _hdIuniq :: Int+                              _tlIerrors :: (Seq Error)+                              _tlIoutput :: Alternatives+                              _tlIuniq :: Int+                              -- use rule "DefaultRules.ag"(line 107, column 19)+                              _lhsOerrors =+                                  _hdIerrors Seq.<> _tlIerrors+                              -- self rule+                              _output =+                                  (:) _hdIoutput _tlIoutput+                              -- self rule+                              _lhsOoutput =+                                  _output+                              -- copy rule (up)+                              _lhsOuniq =+                                  _tlIuniq+                              -- copy rule (down)+                              _hdOcr =+                                  _lhsIcr+                              -- copy rule (down)+                              _hdOinh =+                                  _lhsIinh+                              -- copy rule (down)+                              _hdOmanualAttrOrderMap =+                                  _lhsImanualAttrOrderMap+                              -- copy rule (down)+                              _hdOnonterminals =+                                  _lhsInonterminals+                              -- copy rule (down)+                              _hdOnt =+                                  _lhsInt+                              -- copy rule (down)+                              _hdOo_rename =+                                  _lhsIo_rename+                              -- copy rule (down)+                              _hdOsyn =+                                  _lhsIsyn+                              -- copy rule (down)+                              _hdOtypeSyns =+                                  _lhsItypeSyns+                              -- copy rule (down)+                              _hdOuniq =+                                  _lhsIuniq+                              -- copy rule (down)+                              _hdOuseMap =+                                  _lhsIuseMap+                              -- copy rule (down)+                              _tlOcr =+                                  _lhsIcr+                              -- copy rule (down)+                              _tlOinh =+                                  _lhsIinh+                              -- copy rule (down)+                              _tlOmanualAttrOrderMap =+                                  _lhsImanualAttrOrderMap+                              -- copy rule (down)+                              _tlOnonterminals =+                                  _lhsInonterminals+                              -- copy rule (down)+                              _tlOnt =+                                  _lhsInt+                              -- copy rule (down)+                              _tlOo_rename =+                                  _lhsIo_rename+                              -- copy rule (down)+                              _tlOsyn =+                                  _lhsIsyn+                              -- copy rule (down)+                              _tlOtypeSyns =+                                  _lhsItypeSyns+                              -- copy rule (chain)+                              _tlOuniq =+                                  _hdIuniq+                              -- copy rule (down)+                              _tlOuseMap =+                                  _lhsIuseMap+                              ( _hdIerrors,_hdIoutput,_hdIuniq) =+                                  (hd_ _hdOcr _hdOinh _hdOmanualAttrOrderMap _hdOnonterminals _hdOnt _hdOo_rename _hdOsyn _hdOtypeSyns _hdOuniq _hdOuseMap )+                              ( _tlIerrors,_tlIoutput,_tlIuniq) =+                                  (tl_ _tlOcr _tlOinh _tlOmanualAttrOrderMap _tlOnonterminals _tlOnt _tlOo_rename _tlOsyn _tlOtypeSyns _tlOuniq _tlOuseMap )+                          in  ( _lhsOerrors,_lhsOoutput,_lhsOuniq))) )+sem_Alternatives_Nil :: T_Alternatives+sem_Alternatives_Nil  =+    (T_Alternatives (\ _lhsIcr+                       _lhsIinh+                       _lhsImanualAttrOrderMap+                       _lhsInonterminals+                       _lhsInt+                       _lhsIo_rename+                       _lhsIsyn+                       _lhsItypeSyns+                       _lhsIuniq+                       _lhsIuseMap ->+                         (let _lhsOerrors :: (Seq Error)+                              _lhsOoutput :: Alternatives+                              _lhsOuniq :: Int+                              -- use rule "DefaultRules.ag"(line 107, column 19)+                              _lhsOerrors =+                                  Seq.empty+                              -- self rule+                              _output =+                                  []+                              -- self rule+                              _lhsOoutput =+                                  _output+                              -- copy rule (chain)+                              _lhsOuniq =+                                  _lhsIuniq+                          in  ( _lhsOerrors,_lhsOoutput,_lhsOuniq))) )+-- Child -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         con                  : Constructor+         cr                   : Bool+         nt                   : Nonterminal+      synthesized attributes:+         errors               : Seq Error+         field                :  (Name,Type,Bool) +         inherited            : Attributes+         name                 : Name+         output               : SELF+         synthesized          : Attributes+   alternatives:+      alternative Child:+         child name           : {Name}+         child tp             : {Type}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child higherOrder    : {Bool}+         visit 0:+            local output      : _+-}+-- cata+sem_Child :: Child ->+             T_Child+sem_Child (Child _name _tp _inh _syn _higherOrder )  =+    (sem_Child_Child _name _tp _inh _syn _higherOrder )+-- semantic domain+newtype T_Child = T_Child (Constructor ->+                           Bool ->+                           Nonterminal ->+                           ( (Seq Error),( (Name,Type,Bool) ),Attributes,Name,Child,Attributes))+data Inh_Child = Inh_Child {con_Inh_Child :: Constructor,cr_Inh_Child :: Bool,nt_Inh_Child :: Nonterminal}+data Syn_Child = Syn_Child {errors_Syn_Child :: Seq Error,field_Syn_Child ::  (Name,Type,Bool) ,inherited_Syn_Child :: Attributes,name_Syn_Child :: Name,output_Syn_Child :: Child,synthesized_Syn_Child :: Attributes}+wrap_Child (T_Child sem ) (Inh_Child _lhsIcon _lhsIcr _lhsInt )  =+    (let ( _lhsOerrors,_lhsOfield,_lhsOinherited,_lhsOname,_lhsOoutput,_lhsOsynthesized) =+             (sem _lhsIcon _lhsIcr _lhsInt )+     in  (Syn_Child _lhsOerrors _lhsOfield _lhsOinherited _lhsOname _lhsOoutput _lhsOsynthesized ))+sem_Child_Child :: Name ->+                   Type ->+                   Attributes ->+                   Attributes ->+                   Bool ->+                   T_Child+sem_Child_Child name_ tp_ inh_ syn_ higherOrder_  =+    (T_Child (\ _lhsIcon+                _lhsIcr+                _lhsInt ->+                  (let _lhsOname :: Name+                       _lhsOinherited :: Attributes+                       _lhsOsynthesized :: Attributes+                       _lhsOfield :: ( (Name,Type,Bool) )+                       _lhsOerrors :: (Seq Error)+                       _lhsOoutput :: Child+                       -- "DefaultRules.ag"(line 138, column 11)+                       _lhsOname =+                           name_+                       -- "DefaultRules.ag"(line 147, column 11)+                       _lhsOinherited =+                           inh_+                       -- "DefaultRules.ag"(line 148, column 11)+                       _lhsOsynthesized =+                           syn_+                       -- "DefaultRules.ag"(line 386, column 11)+                       _lhsOfield =+                           (name_,tp_,higherOrder_)+                       -- use rule "DefaultRules.ag"(line 107, column 19)+                       _lhsOerrors =+                           Seq.empty+                       -- self rule+                       _output =+                           Child name_ tp_ inh_ syn_ higherOrder_+                       -- self rule+                       _lhsOoutput =+                           _output+                   in  ( _lhsOerrors,_lhsOfield,_lhsOinherited,_lhsOname,_lhsOoutput,_lhsOsynthesized))) )+-- Children ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         con                  : Constructor+         cr                   : Bool+         nt                   : Nonterminal+      synthesized attributes:+         errors               : Seq Error+         fields               : [(Name,Type,Bool)]+         inputs               : [(Name, Attributes)]+         output               : SELF+         outputs              : [(Name, Attributes)]+   alternatives:+      alternative Cons:+         child hd             : Child+         child tl             : Children+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Children :: Children ->+                T_Children+sem_Children list  =+    (Prelude.foldr sem_Children_Cons sem_Children_Nil (Prelude.map sem_Child list) )+-- semantic domain+newtype T_Children = T_Children (Constructor ->+                                 Bool ->+                                 Nonterminal ->+                                 ( (Seq Error),([(Name,Type,Bool)]),([(Name, Attributes)]),Children,([(Name, Attributes)])))+data Inh_Children = Inh_Children {con_Inh_Children :: Constructor,cr_Inh_Children :: Bool,nt_Inh_Children :: Nonterminal}+data Syn_Children = Syn_Children {errors_Syn_Children :: Seq Error,fields_Syn_Children :: [(Name,Type,Bool)],inputs_Syn_Children :: [(Name, Attributes)],output_Syn_Children :: Children,outputs_Syn_Children :: [(Name, Attributes)]}+wrap_Children (T_Children sem ) (Inh_Children _lhsIcon _lhsIcr _lhsInt )  =+    (let ( _lhsOerrors,_lhsOfields,_lhsOinputs,_lhsOoutput,_lhsOoutputs) =+             (sem _lhsIcon _lhsIcr _lhsInt )+     in  (Syn_Children _lhsOerrors _lhsOfields _lhsOinputs _lhsOoutput _lhsOoutputs ))+sem_Children_Cons :: T_Child ->+                     T_Children ->+                     T_Children+sem_Children_Cons (T_Child hd_ ) (T_Children tl_ )  =+    (T_Children (\ _lhsIcon+                   _lhsIcr+                   _lhsInt ->+                     (let _lhsOinputs :: ([(Name, Attributes)])+                          _lhsOoutputs :: ([(Name, Attributes)])+                          _lhsOfields :: ([(Name,Type,Bool)])+                          _lhsOerrors :: (Seq Error)+                          _lhsOoutput :: Children+                          _hdOcon :: Constructor+                          _hdOcr :: Bool+                          _hdOnt :: Nonterminal+                          _tlOcon :: Constructor+                          _tlOcr :: Bool+                          _tlOnt :: Nonterminal+                          _hdIerrors :: (Seq Error)+                          _hdIfield :: ( (Name,Type,Bool) )+                          _hdIinherited :: Attributes+                          _hdIname :: Name+                          _hdIoutput :: Child+                          _hdIsynthesized :: Attributes+                          _tlIerrors :: (Seq Error)+                          _tlIfields :: ([(Name,Type,Bool)])+                          _tlIinputs :: ([(Name, Attributes)])+                          _tlIoutput :: Children+                          _tlIoutputs :: ([(Name, Attributes)])+                          -- "DefaultRules.ag"(line 151, column 10)+                          _lhsOinputs =+                              (_hdIname, _hdIinherited) : _tlIinputs+                          -- "DefaultRules.ag"(line 151, column 10)+                          _lhsOoutputs =+                              (_hdIname, _hdIsynthesized) : _tlIoutputs+                          -- "DefaultRules.ag"(line 382, column 10)+                          _lhsOfields =+                              _hdIfield : _tlIfields+                          -- use rule "DefaultRules.ag"(line 107, column 19)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- self rule+                          _output =+                              (:) _hdIoutput _tlIoutput+                          -- self rule+                          _lhsOoutput =+                              _output+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOcr =+                              _lhsIcr+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _tlOcr =+                              _lhsIcr+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          ( _hdIerrors,_hdIfield,_hdIinherited,_hdIname,_hdIoutput,_hdIsynthesized) =+                              (hd_ _hdOcon _hdOcr _hdOnt )+                          ( _tlIerrors,_tlIfields,_tlIinputs,_tlIoutput,_tlIoutputs) =+                              (tl_ _tlOcon _tlOcr _tlOnt )+                      in  ( _lhsOerrors,_lhsOfields,_lhsOinputs,_lhsOoutput,_lhsOoutputs))) )+sem_Children_Nil :: T_Children+sem_Children_Nil  =+    (T_Children (\ _lhsIcon+                   _lhsIcr+                   _lhsInt ->+                     (let _lhsOinputs :: ([(Name, Attributes)])+                          _lhsOoutputs :: ([(Name, Attributes)])+                          _lhsOfields :: ([(Name,Type,Bool)])+                          _lhsOerrors :: (Seq Error)+                          _lhsOoutput :: Children+                          -- "DefaultRules.ag"(line 153, column 10)+                          _lhsOinputs =+                              []+                          -- "DefaultRules.ag"(line 153, column 10)+                          _lhsOoutputs =+                              []+                          -- "DefaultRules.ag"(line 383, column 10)+                          _lhsOfields =+                              []+                          -- use rule "DefaultRules.ag"(line 107, column 19)+                          _lhsOerrors =+                              Seq.empty+                          -- self rule+                          _output =+                              []+                          -- self rule+                          _lhsOoutput =+                              _output+                      in  ( _lhsOerrors,_lhsOfields,_lhsOinputs,_lhsOoutput,_lhsOoutputs))) )+-- Grammar -----------------------------------------------------+{-+   visit 0:+      inherited attribute:+         options              : Options+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Grammar:+         child typeSyns       : {TypeSyns}+         child useMap         : {UseMap}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : Productions+         child pragmas        : {PragmaMap}+         child manualAttrOrderMap : {AttrOrderMap}+         visit 0:+            local output      : _+-}+-- cata+sem_Grammar :: Grammar ->+               T_Grammar+sem_Grammar (Grammar _typeSyns _useMap _derivings _wrappers _prods _pragmas _manualAttrOrderMap )  =+    (sem_Grammar_Grammar _typeSyns _useMap _derivings _wrappers (sem_Productions _prods ) _pragmas _manualAttrOrderMap )+-- semantic domain+newtype T_Grammar = T_Grammar (Options ->+                               ( (Seq Error),Grammar))+data Inh_Grammar = Inh_Grammar {options_Inh_Grammar :: Options}+data Syn_Grammar = Syn_Grammar {errors_Syn_Grammar :: Seq Error,output_Syn_Grammar :: Grammar}+wrap_Grammar (T_Grammar sem ) (Inh_Grammar _lhsIoptions )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem _lhsIoptions )+     in  (Syn_Grammar _lhsOerrors _lhsOoutput ))+sem_Grammar_Grammar :: TypeSyns ->+                       UseMap ->+                       Derivings ->+                       (Set Nonterminal) ->+                       T_Productions ->+                       PragmaMap ->+                       AttrOrderMap ->+                       T_Grammar+sem_Grammar_Grammar typeSyns_ useMap_ derivings_ wrappers_ (T_Productions prods_ ) pragmas_ manualAttrOrderMap_  =+    (T_Grammar (\ _lhsIoptions ->+                    (let _prodsOo_rename :: Bool+                         _prodsOcr :: Bool+                         _prodsOnonterminals :: (Set Nonterminal)+                         _prodsOuseMap :: UseMap+                         _prodsOtypeSyns :: TypeSyns+                         _prodsOuniq :: Int+                         _prodsOmanualAttrOrderMap :: AttrOrderMap+                         _lhsOerrors :: (Seq Error)+                         _lhsOoutput :: Grammar+                         _prodsIcollect_nts :: (Set Nonterminal)+                         _prodsIerrors :: (Seq Error)+                         _prodsIoutput :: Productions+                         _prodsIuniq :: Int+                         -- "DefaultRules.ag"(line 41, column 17)+                         _prodsOo_rename =+                             rename    _lhsIoptions+                         -- "DefaultRules.ag"(line 42, column 17)+                         _prodsOcr =+                             modcopy   _lhsIoptions+                         -- "DefaultRules.ag"(line 119, column 13)+                         _prodsOnonterminals =+                             _prodsIcollect_nts+                         -- "DefaultRules.ag"(line 140, column 13)+                         _prodsOuseMap =+                             useMap_+                         -- "DefaultRules.ag"(line 142, column 13)+                         _prodsOtypeSyns =+                             typeSyns_+                         -- "DefaultRules.ag"(line 403, column 13)+                         _prodsOuniq =+                             1+                         -- "DefaultRules.ag"(line 479, column 7)+                         _prodsOmanualAttrOrderMap =+                             manualAttrOrderMap_+                         -- use rule "DefaultRules.ag"(line 107, column 19)+                         _lhsOerrors =+                             _prodsIerrors+                         -- self rule+                         _output =+                             Grammar typeSyns_ useMap_ derivings_ wrappers_ _prodsIoutput pragmas_ manualAttrOrderMap_+                         -- self rule+                         _lhsOoutput =+                             _output+                         ( _prodsIcollect_nts,_prodsIerrors,_prodsIoutput,_prodsIuniq) =+                             (prods_ _prodsOcr _prodsOmanualAttrOrderMap _prodsOnonterminals _prodsOo_rename _prodsOtypeSyns _prodsOuniq _prodsOuseMap )+                     in  ( _lhsOerrors,_lhsOoutput))) )+-- Pattern -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         con                  : Constructor+         nt                   : Nonterminal+      synthesized attributes:+         containsVars         : Bool+         copy                 : SELF+         definedAttrs         : Set (Name,Name)+         errors               : Seq Error+         locals               : Set Name+         output               : SELF+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local copy        : _+            local output      : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+            local output      : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+            local output      : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+            local output      : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts )  =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+sem_Pattern (Constr _name _pats )  =+    (sem_Pattern_Constr _name (sem_Patterns _pats ) )+sem_Pattern (Product _pos _pats )  =+    (sem_Pattern_Product _pos (sem_Patterns _pats ) )+sem_Pattern (Underscore _pos )  =+    (sem_Pattern_Underscore _pos )+-- semantic domain+newtype T_Pattern = T_Pattern (Constructor ->+                               Nonterminal ->+                               ( Bool,Pattern,(Set (Name,Name)),(Seq Error),(Set Name),Pattern))+data Inh_Pattern = Inh_Pattern {con_Inh_Pattern :: Constructor,nt_Inh_Pattern :: Nonterminal}+data Syn_Pattern = Syn_Pattern {containsVars_Syn_Pattern :: Bool,copy_Syn_Pattern :: Pattern,definedAttrs_Syn_Pattern :: Set (Name,Name),errors_Syn_Pattern :: Seq Error,locals_Syn_Pattern :: Set Name,output_Syn_Pattern :: Pattern}+wrap_Pattern (T_Pattern sem ) (Inh_Pattern _lhsIcon _lhsInt )  =+    (let ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput) =+             (sem _lhsIcon _lhsInt )+     in  (Syn_Pattern _lhsOcontainsVars _lhsOcopy _lhsOdefinedAttrs _lhsOerrors _lhsOlocals _lhsOoutput ))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ )  =+    (T_Pattern (\ _lhsIcon+                  _lhsInt ->+                    (let _lhsOdefinedAttrs :: (Set (Name,Name))+                         _lhsOlocals :: (Set Name)+                         _lhsOcontainsVars :: Bool+                         _lhsOerrors :: (Seq Error)+                         _lhsOcopy :: Pattern+                         _lhsOoutput :: Pattern+                         _patOcon :: Constructor+                         _patOnt :: Nonterminal+                         _partsOcon :: Constructor+                         _partsOnt :: Nonterminal+                         _patIcontainsVars :: Bool+                         _patIcopy :: Pattern+                         _patIdefinedAttrs :: (Set (Name,Name))+                         _patIerrors :: (Seq Error)+                         _patIlocals :: (Set Name)+                         _patIoutput :: Pattern+                         _partsIcontainsVars :: Bool+                         _partsIcopy :: Patterns+                         _partsIdefinedAttrs :: (Set (Name,Name))+                         _partsIerrors :: (Seq Error)+                         _partsIlocals :: (Set Name)+                         _partsIoutput :: Patterns+                         -- "DefaultRules.ag"(line 376, column 11)+                         _lhsOdefinedAttrs =+                             Set.insert (field_,attr_) _patIdefinedAttrs+                         -- "DefaultRules.ag"(line 376, column 11)+                         _lhsOlocals =+                             if field_ == _LOC+                                then Set.insert attr_ _patIlocals+                                else _patIlocals+                         -- "DefaultRules.ag"(line 394, column 16)+                         _lhsOcontainsVars =+                             True+                         -- use rule "DefaultRules.ag"(line 107, column 19)+                         _lhsOerrors =+                             _patIerrors Seq.<> _partsIerrors+                         -- self rule+                         _copy =+                             Alias field_ attr_ _patIcopy _partsIcopy+                         -- self rule+                         _output =+                             Alias field_ attr_ _patIoutput _partsIoutput+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- self rule+                         _lhsOoutput =+                             _output+                         -- copy rule (down)+                         _patOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patOnt =+                             _lhsInt+                         -- copy rule (down)+                         _partsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _partsOnt =+                             _lhsInt+                         ( _patIcontainsVars,_patIcopy,_patIdefinedAttrs,_patIerrors,_patIlocals,_patIoutput) =+                             (pat_ _patOcon _patOnt )+                         ( _partsIcontainsVars,_partsIcopy,_partsIdefinedAttrs,_partsIerrors,_partsIlocals,_partsIoutput) =+                             (parts_ _partsOcon _partsOnt )+                     in  ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput))) )+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIcon+                  _lhsInt ->+                    (let _lhsOcontainsVars :: Bool+                         _lhsOdefinedAttrs :: (Set (Name,Name))+                         _lhsOerrors :: (Seq Error)+                         _lhsOlocals :: (Set Name)+                         _lhsOcopy :: Pattern+                         _lhsOoutput :: Pattern+                         _patsOcon :: Constructor+                         _patsOnt :: Nonterminal+                         _patsIcontainsVars :: Bool+                         _patsIcopy :: Patterns+                         _patsIdefinedAttrs :: (Set (Name,Name))+                         _patsIerrors :: (Seq Error)+                         _patsIlocals :: (Set Name)+                         _patsIoutput :: Patterns+                         -- use rule "DefaultRules.ag"(line 391, column 46)+                         _lhsOcontainsVars =+                             _patsIcontainsVars+                         -- use rule "DefaultRules.ag"(line 371, column 23)+                         _lhsOdefinedAttrs =+                             _patsIdefinedAttrs+                         -- use rule "DefaultRules.ag"(line 107, column 19)+                         _lhsOerrors =+                             _patsIerrors+                         -- use rule "DefaultRules.ag"(line 370, column 23)+                         _lhsOlocals =+                             _patsIlocals+                         -- self rule+                         _copy =+                             Constr name_ _patsIcopy+                         -- self rule+                         _output =+                             Constr name_ _patsIoutput+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- self rule+                         _lhsOoutput =+                             _output+                         -- copy rule (down)+                         _patsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patsOnt =+                             _lhsInt+                         ( _patsIcontainsVars,_patsIcopy,_patsIdefinedAttrs,_patsIerrors,_patsIlocals,_patsIoutput) =+                             (pats_ _patsOcon _patsOnt )+                     in  ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput))) )+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIcon+                  _lhsInt ->+                    (let _lhsOcontainsVars :: Bool+                         _lhsOdefinedAttrs :: (Set (Name,Name))+                         _lhsOerrors :: (Seq Error)+                         _lhsOlocals :: (Set Name)+                         _lhsOcopy :: Pattern+                         _lhsOoutput :: Pattern+                         _patsOcon :: Constructor+                         _patsOnt :: Nonterminal+                         _patsIcontainsVars :: Bool+                         _patsIcopy :: Patterns+                         _patsIdefinedAttrs :: (Set (Name,Name))+                         _patsIerrors :: (Seq Error)+                         _patsIlocals :: (Set Name)+                         _patsIoutput :: Patterns+                         -- use rule "DefaultRules.ag"(line 391, column 46)+                         _lhsOcontainsVars =+                             _patsIcontainsVars+                         -- use rule "DefaultRules.ag"(line 371, column 23)+                         _lhsOdefinedAttrs =+                             _patsIdefinedAttrs+                         -- use rule "DefaultRules.ag"(line 107, column 19)+                         _lhsOerrors =+                             _patsIerrors+                         -- use rule "DefaultRules.ag"(line 370, column 23)+                         _lhsOlocals =+                             _patsIlocals+                         -- self rule+                         _copy =+                             Product pos_ _patsIcopy+                         -- self rule+                         _output =+                             Product pos_ _patsIoutput+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- self rule+                         _lhsOoutput =+                             _output+                         -- copy rule (down)+                         _patsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patsOnt =+                             _lhsInt+                         ( _patsIcontainsVars,_patsIcopy,_patsIdefinedAttrs,_patsIerrors,_patsIlocals,_patsIoutput) =+                             (pats_ _patsOcon _patsOnt )+                     in  ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput))) )+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_  =+    (T_Pattern (\ _lhsIcon+                  _lhsInt ->+                    (let _lhsOcontainsVars :: Bool+                         _lhsOdefinedAttrs :: (Set (Name,Name))+                         _lhsOerrors :: (Seq Error)+                         _lhsOlocals :: (Set Name)+                         _lhsOcopy :: Pattern+                         _lhsOoutput :: Pattern+                         -- use rule "DefaultRules.ag"(line 391, column 46)+                         _lhsOcontainsVars =+                             False+                         -- use rule "DefaultRules.ag"(line 371, column 23)+                         _lhsOdefinedAttrs =+                             Set.empty+                         -- use rule "DefaultRules.ag"(line 107, column 19)+                         _lhsOerrors =+                             Seq.empty+                         -- use rule "DefaultRules.ag"(line 370, column 23)+                         _lhsOlocals =+                             Set.empty+                         -- self rule+                         _copy =+                             Underscore pos_+                         -- self rule+                         _output =+                             Underscore pos_+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- self rule+                         _lhsOoutput =+                             _output+                     in  ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput))) )+-- Patterns ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         con                  : Constructor+         nt                   : Nonterminal+      synthesized attributes:+         containsVars         : Bool+         copy                 : SELF+         definedAttrs         : Set (Name,Name)+         errors               : Seq Error+         locals               : Set Name+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+            local output      : _+      alternative Nil:+         visit 0:+            local copy        : _+            local output      : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list  =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns (Constructor ->+                                 Nonterminal ->+                                 ( Bool,Patterns,(Set (Name,Name)),(Seq Error),(Set Name),Patterns))+data Inh_Patterns = Inh_Patterns {con_Inh_Patterns :: Constructor,nt_Inh_Patterns :: Nonterminal}+data Syn_Patterns = Syn_Patterns {containsVars_Syn_Patterns :: Bool,copy_Syn_Patterns :: Patterns,definedAttrs_Syn_Patterns :: Set (Name,Name),errors_Syn_Patterns :: Seq Error,locals_Syn_Patterns :: Set Name,output_Syn_Patterns :: Patterns}+wrap_Patterns (T_Patterns sem ) (Inh_Patterns _lhsIcon _lhsInt )  =+    (let ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput) =+             (sem _lhsIcon _lhsInt )+     in  (Syn_Patterns _lhsOcontainsVars _lhsOcopy _lhsOdefinedAttrs _lhsOerrors _lhsOlocals _lhsOoutput ))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =+    (T_Patterns (\ _lhsIcon+                   _lhsInt ->+                     (let _lhsOcontainsVars :: Bool+                          _lhsOdefinedAttrs :: (Set (Name,Name))+                          _lhsOerrors :: (Seq Error)+                          _lhsOlocals :: (Set Name)+                          _lhsOcopy :: Patterns+                          _lhsOoutput :: Patterns+                          _hdOcon :: Constructor+                          _hdOnt :: Nonterminal+                          _tlOcon :: Constructor+                          _tlOnt :: Nonterminal+                          _hdIcontainsVars :: Bool+                          _hdIcopy :: Pattern+                          _hdIdefinedAttrs :: (Set (Name,Name))+                          _hdIerrors :: (Seq Error)+                          _hdIlocals :: (Set Name)+                          _hdIoutput :: Pattern+                          _tlIcontainsVars :: Bool+                          _tlIcopy :: Patterns+                          _tlIdefinedAttrs :: (Set (Name,Name))+                          _tlIerrors :: (Seq Error)+                          _tlIlocals :: (Set Name)+                          _tlIoutput :: Patterns+                          -- use rule "DefaultRules.ag"(line 391, column 46)+                          _lhsOcontainsVars =+                              _hdIcontainsVars || _tlIcontainsVars+                          -- use rule "DefaultRules.ag"(line 371, column 23)+                          _lhsOdefinedAttrs =+                              _hdIdefinedAttrs `Set.union` _tlIdefinedAttrs+                          -- use rule "DefaultRules.ag"(line 107, column 19)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- use rule "DefaultRules.ag"(line 370, column 23)+                          _lhsOlocals =+                              _hdIlocals `Set.union` _tlIlocals+                          -- self rule+                          _copy =+                              (:) _hdIcopy _tlIcopy+                          -- self rule+                          _output =+                              (:) _hdIoutput _tlIoutput+                          -- self rule+                          _lhsOcopy =+                              _copy+                          -- self rule+                          _lhsOoutput =+                              _output+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          ( _hdIcontainsVars,_hdIcopy,_hdIdefinedAttrs,_hdIerrors,_hdIlocals,_hdIoutput) =+                              (hd_ _hdOcon _hdOnt )+                          ( _tlIcontainsVars,_tlIcopy,_tlIdefinedAttrs,_tlIerrors,_tlIlocals,_tlIoutput) =+                              (tl_ _tlOcon _tlOnt )+                      in  ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput))) )+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (\ _lhsIcon+                   _lhsInt ->+                     (let _lhsOcontainsVars :: Bool+                          _lhsOdefinedAttrs :: (Set (Name,Name))+                          _lhsOerrors :: (Seq Error)+                          _lhsOlocals :: (Set Name)+                          _lhsOcopy :: Patterns+                          _lhsOoutput :: Patterns+                          -- use rule "DefaultRules.ag"(line 391, column 46)+                          _lhsOcontainsVars =+                              False+                          -- use rule "DefaultRules.ag"(line 371, column 23)+                          _lhsOdefinedAttrs =+                              Set.empty+                          -- use rule "DefaultRules.ag"(line 107, column 19)+                          _lhsOerrors =+                              Seq.empty+                          -- use rule "DefaultRules.ag"(line 370, column 23)+                          _lhsOlocals =+                              Set.empty+                          -- self rule+                          _copy =+                              []+                          -- self rule+                          _output =+                              []+                          -- self rule+                          _lhsOcopy =+                              _copy+                          -- self rule+                          _lhsOoutput =+                              _output+                      in  ( _lhsOcontainsVars,_lhsOcopy,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput))) )+-- Production --------------------------------------------------+{-+   visit 0:+      inherited attributes:+         cr                   : Bool+         manualAttrOrderMap   : AttrOrderMap+         nonterminals         : Set Nonterminal+         o_rename             : Bool+         typeSyns             : TypeSyns+         useMap               : UseMap+      chained attribute:+         uniq                 : Int+      synthesized attributes:+         collect_nts          : Set Nonterminal+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Production:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : Alternatives+         visit 0:+            local output      : _+-}+-- cata+sem_Production :: Production ->+                  T_Production+sem_Production (Production _nt _inh _syn _alts )  =+    (sem_Production_Production _nt _inh _syn (sem_Alternatives _alts ) )+-- semantic domain+newtype T_Production = T_Production (Bool ->+                                     AttrOrderMap ->+                                     (Set Nonterminal) ->+                                     Bool ->+                                     TypeSyns ->+                                     Int ->+                                     UseMap ->+                                     ( (Set Nonterminal),(Seq Error),Production,Int))+data Inh_Production = Inh_Production {cr_Inh_Production :: Bool,manualAttrOrderMap_Inh_Production :: AttrOrderMap,nonterminals_Inh_Production :: Set Nonterminal,o_rename_Inh_Production :: Bool,typeSyns_Inh_Production :: TypeSyns,uniq_Inh_Production :: Int,useMap_Inh_Production :: UseMap}+data Syn_Production = Syn_Production {collect_nts_Syn_Production :: Set Nonterminal,errors_Syn_Production :: Seq Error,output_Syn_Production :: Production,uniq_Syn_Production :: Int}+wrap_Production (T_Production sem ) (Inh_Production _lhsIcr _lhsImanualAttrOrderMap _lhsInonterminals _lhsIo_rename _lhsItypeSyns _lhsIuniq _lhsIuseMap )  =+    (let ( _lhsOcollect_nts,_lhsOerrors,_lhsOoutput,_lhsOuniq) =+             (sem _lhsIcr _lhsImanualAttrOrderMap _lhsInonterminals _lhsIo_rename _lhsItypeSyns _lhsIuniq _lhsIuseMap )+     in  (Syn_Production _lhsOcollect_nts _lhsOerrors _lhsOoutput _lhsOuniq ))+sem_Production_Production :: Nonterminal ->+                             Attributes ->+                             Attributes ->+                             T_Alternatives ->+                             T_Production+sem_Production_Production nt_ inh_ syn_ (T_Alternatives alts_ )  =+    (T_Production (\ _lhsIcr+                     _lhsImanualAttrOrderMap+                     _lhsInonterminals+                     _lhsIo_rename+                     _lhsItypeSyns+                     _lhsIuniq+                     _lhsIuseMap ->+                       (let _lhsOcollect_nts :: (Set Nonterminal)+                            _altsOinh :: Attributes+                            _altsOsyn :: Attributes+                            _altsOuseMap :: (Map Name (String,String,String))+                            _altsOnt :: Nonterminal+                            _lhsOerrors :: (Seq Error)+                            _lhsOoutput :: Production+                            _lhsOuniq :: Int+                            _altsOcr :: Bool+                            _altsOmanualAttrOrderMap :: AttrOrderMap+                            _altsOnonterminals :: (Set Nonterminal)+                            _altsOo_rename :: Bool+                            _altsOtypeSyns :: TypeSyns+                            _altsOuniq :: Int+                            _altsIerrors :: (Seq Error)+                            _altsIoutput :: Alternatives+                            _altsIuniq :: Int+                            -- "DefaultRules.ag"(line 115, column 16)+                            _lhsOcollect_nts =+                                Set.singleton nt_+                            -- "DefaultRules.ag"(line 130, column 17)+                            _altsOinh =+                                inh_+                            -- "DefaultRules.ag"(line 131, column 17)+                            _altsOsyn =+                                syn_+                            -- "DefaultRules.ag"(line 132, column 17)+                            _altsOuseMap =+                                Map.findWithDefault Map.empty nt_ _lhsIuseMap+                            -- "DefaultRules.ag"(line 144, column 16)+                            _altsOnt =+                                nt_+                            -- use rule "DefaultRules.ag"(line 107, column 19)+                            _lhsOerrors =+                                _altsIerrors+                            -- self rule+                            _output =+                                Production nt_ inh_ syn_ _altsIoutput+                            -- self rule+                            _lhsOoutput =+                                _output+                            -- copy rule (up)+                            _lhsOuniq =+                                _altsIuniq+                            -- copy rule (down)+                            _altsOcr =+                                _lhsIcr+                            -- copy rule (down)+                            _altsOmanualAttrOrderMap =+                                _lhsImanualAttrOrderMap+                            -- copy rule (down)+                            _altsOnonterminals =+                                _lhsInonterminals+                            -- copy rule (down)+                            _altsOo_rename =+                                _lhsIo_rename+                            -- copy rule (down)+                            _altsOtypeSyns =+                                _lhsItypeSyns+                            -- copy rule (down)+                            _altsOuniq =+                                _lhsIuniq+                            ( _altsIerrors,_altsIoutput,_altsIuniq) =+                                (alts_ _altsOcr _altsOinh _altsOmanualAttrOrderMap _altsOnonterminals _altsOnt _altsOo_rename _altsOsyn _altsOtypeSyns _altsOuniq _altsOuseMap )+                        in  ( _lhsOcollect_nts,_lhsOerrors,_lhsOoutput,_lhsOuniq))) )+-- Productions -------------------------------------------------+{-+   visit 0:+      inherited attributes:+         cr                   : Bool+         manualAttrOrderMap   : AttrOrderMap+         nonterminals         : Set Nonterminal+         o_rename             : Bool+         typeSyns             : TypeSyns+         useMap               : UseMap+      chained attribute:+         uniq                 : Int+      synthesized attributes:+         collect_nts          : Set Nonterminal+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Production+         child tl             : Productions+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Productions :: Productions ->+                   T_Productions+sem_Productions list  =+    (Prelude.foldr sem_Productions_Cons sem_Productions_Nil (Prelude.map sem_Production list) )+-- semantic domain+newtype T_Productions = T_Productions (Bool ->+                                       AttrOrderMap ->+                                       (Set Nonterminal) ->+                                       Bool ->+                                       TypeSyns ->+                                       Int ->+                                       UseMap ->+                                       ( (Set Nonterminal),(Seq Error),Productions,Int))+data Inh_Productions = Inh_Productions {cr_Inh_Productions :: Bool,manualAttrOrderMap_Inh_Productions :: AttrOrderMap,nonterminals_Inh_Productions :: Set Nonterminal,o_rename_Inh_Productions :: Bool,typeSyns_Inh_Productions :: TypeSyns,uniq_Inh_Productions :: Int,useMap_Inh_Productions :: UseMap}+data Syn_Productions = Syn_Productions {collect_nts_Syn_Productions :: Set Nonterminal,errors_Syn_Productions :: Seq Error,output_Syn_Productions :: Productions,uniq_Syn_Productions :: Int}+wrap_Productions (T_Productions sem ) (Inh_Productions _lhsIcr _lhsImanualAttrOrderMap _lhsInonterminals _lhsIo_rename _lhsItypeSyns _lhsIuniq _lhsIuseMap )  =+    (let ( _lhsOcollect_nts,_lhsOerrors,_lhsOoutput,_lhsOuniq) =+             (sem _lhsIcr _lhsImanualAttrOrderMap _lhsInonterminals _lhsIo_rename _lhsItypeSyns _lhsIuniq _lhsIuseMap )+     in  (Syn_Productions _lhsOcollect_nts _lhsOerrors _lhsOoutput _lhsOuniq ))+sem_Productions_Cons :: T_Production ->+                        T_Productions ->+                        T_Productions+sem_Productions_Cons (T_Production hd_ ) (T_Productions tl_ )  =+    (T_Productions (\ _lhsIcr+                      _lhsImanualAttrOrderMap+                      _lhsInonterminals+                      _lhsIo_rename+                      _lhsItypeSyns+                      _lhsIuniq+                      _lhsIuseMap ->+                        (let _lhsOcollect_nts :: (Set Nonterminal)+                             _lhsOerrors :: (Seq Error)+                             _lhsOoutput :: Productions+                             _lhsOuniq :: Int+                             _hdOcr :: Bool+                             _hdOmanualAttrOrderMap :: AttrOrderMap+                             _hdOnonterminals :: (Set Nonterminal)+                             _hdOo_rename :: Bool+                             _hdOtypeSyns :: TypeSyns+                             _hdOuniq :: Int+                             _hdOuseMap :: UseMap+                             _tlOcr :: Bool+                             _tlOmanualAttrOrderMap :: AttrOrderMap+                             _tlOnonterminals :: (Set Nonterminal)+                             _tlOo_rename :: Bool+                             _tlOtypeSyns :: TypeSyns+                             _tlOuniq :: Int+                             _tlOuseMap :: UseMap+                             _hdIcollect_nts :: (Set Nonterminal)+                             _hdIerrors :: (Seq Error)+                             _hdIoutput :: Production+                             _hdIuniq :: Int+                             _tlIcollect_nts :: (Set Nonterminal)+                             _tlIerrors :: (Seq Error)+                             _tlIoutput :: Productions+                             _tlIuniq :: Int+                             -- use rule "DefaultRules.ag"(line 113, column 47)+                             _lhsOcollect_nts =+                                 _hdIcollect_nts `Set.union` _tlIcollect_nts+                             -- use rule "DefaultRules.ag"(line 107, column 19)+                             _lhsOerrors =+                                 _hdIerrors Seq.<> _tlIerrors+                             -- self rule+                             _output =+                                 (:) _hdIoutput _tlIoutput+                             -- self rule+                             _lhsOoutput =+                                 _output+                             -- copy rule (up)+                             _lhsOuniq =+                                 _tlIuniq+                             -- copy rule (down)+                             _hdOcr =+                                 _lhsIcr+                             -- copy rule (down)+                             _hdOmanualAttrOrderMap =+                                 _lhsImanualAttrOrderMap+                             -- copy rule (down)+                             _hdOnonterminals =+                                 _lhsInonterminals+                             -- copy rule (down)+                             _hdOo_rename =+                                 _lhsIo_rename+                             -- copy rule (down)+                             _hdOtypeSyns =+                                 _lhsItypeSyns+                             -- copy rule (down)+                             _hdOuniq =+                                 _lhsIuniq+                             -- copy rule (down)+                             _hdOuseMap =+                                 _lhsIuseMap+                             -- copy rule (down)+                             _tlOcr =+                                 _lhsIcr+                             -- copy rule (down)+                             _tlOmanualAttrOrderMap =+                                 _lhsImanualAttrOrderMap+                             -- copy rule (down)+                             _tlOnonterminals =+                                 _lhsInonterminals+                             -- copy rule (down)+                             _tlOo_rename =+                                 _lhsIo_rename+                             -- copy rule (down)+                             _tlOtypeSyns =+                                 _lhsItypeSyns+                             -- copy rule (chain)+                             _tlOuniq =+                                 _hdIuniq+                             -- copy rule (down)+                             _tlOuseMap =+                                 _lhsIuseMap+                             ( _hdIcollect_nts,_hdIerrors,_hdIoutput,_hdIuniq) =+                                 (hd_ _hdOcr _hdOmanualAttrOrderMap _hdOnonterminals _hdOo_rename _hdOtypeSyns _hdOuniq _hdOuseMap )+                             ( _tlIcollect_nts,_tlIerrors,_tlIoutput,_tlIuniq) =+                                 (tl_ _tlOcr _tlOmanualAttrOrderMap _tlOnonterminals _tlOo_rename _tlOtypeSyns _tlOuniq _tlOuseMap )+                         in  ( _lhsOcollect_nts,_lhsOerrors,_lhsOoutput,_lhsOuniq))) )+sem_Productions_Nil :: T_Productions+sem_Productions_Nil  =+    (T_Productions (\ _lhsIcr+                      _lhsImanualAttrOrderMap+                      _lhsInonterminals+                      _lhsIo_rename+                      _lhsItypeSyns+                      _lhsIuniq+                      _lhsIuseMap ->+                        (let _lhsOcollect_nts :: (Set Nonterminal)+                             _lhsOerrors :: (Seq Error)+                             _lhsOoutput :: Productions+                             _lhsOuniq :: Int+                             -- use rule "DefaultRules.ag"(line 113, column 47)+                             _lhsOcollect_nts =+                                 Set.empty+                             -- use rule "DefaultRules.ag"(line 107, column 19)+                             _lhsOerrors =+                                 Seq.empty+                             -- self rule+                             _output =+                                 []+                             -- self rule+                             _lhsOoutput =+                                 _output+                             -- copy rule (chain)+                             _lhsOuniq =+                                 _lhsIuniq+                         in  ( _lhsOcollect_nts,_lhsOerrors,_lhsOoutput,_lhsOuniq))) )+-- Rule --------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         con                  : Constructor+         nt                   : Nonterminal+      chained attribute:+         uniq                 : Int+      synthesized attributes:+         containsVars         : Bool+         definedAttrs         : Set (Name,Name)+         errors               : Seq Error+         locals               : Set Name+         output               : SELF+         outputs              : Rules+   alternatives:+      alternative Rule:+         child pattern        : Pattern+         child rhs            : {Expression}+         child owrt           : {Bool}+         child origin         : {String}+         visit 0:+            local _tup2       : {(Rules,Int)}+            local output      : _+-}+-- cata+sem_Rule :: Rule ->+            T_Rule+sem_Rule (Rule _pattern _rhs _owrt _origin )  =+    (sem_Rule_Rule (sem_Pattern _pattern ) _rhs _owrt _origin )+-- semantic domain+newtype T_Rule = T_Rule (Constructor ->+                         Nonterminal ->+                         Int ->+                         ( Bool,(Set (Name,Name)),(Seq Error),(Set Name),Rule,Rules,Int))+data Inh_Rule = Inh_Rule {con_Inh_Rule :: Constructor,nt_Inh_Rule :: Nonterminal,uniq_Inh_Rule :: Int}+data Syn_Rule = Syn_Rule {containsVars_Syn_Rule :: Bool,definedAttrs_Syn_Rule :: Set (Name,Name),errors_Syn_Rule :: Seq Error,locals_Syn_Rule :: Set Name,output_Syn_Rule :: Rule,outputs_Syn_Rule :: Rules,uniq_Syn_Rule :: Int}+wrap_Rule (T_Rule sem ) (Inh_Rule _lhsIcon _lhsInt _lhsIuniq )  =+    (let ( _lhsOcontainsVars,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput,_lhsOoutputs,_lhsOuniq) =+             (sem _lhsIcon _lhsInt _lhsIuniq )+     in  (Syn_Rule _lhsOcontainsVars _lhsOdefinedAttrs _lhsOerrors _lhsOlocals _lhsOoutput _lhsOoutputs _lhsOuniq ))+sem_Rule_Rule :: T_Pattern ->+                 Expression ->+                 Bool ->+                 String ->+                 T_Rule+sem_Rule_Rule (T_Pattern pattern_ ) rhs_ owrt_ origin_  =+    (T_Rule (\ _lhsIcon+               _lhsInt+               _lhsIuniq ->+                 (let __tup2 :: ((Rules,Int))+                      _lhsOoutputs :: Rules+                      _lhsOuniq :: Int+                      _lhsOcontainsVars :: Bool+                      _lhsOdefinedAttrs :: (Set (Name,Name))+                      _lhsOerrors :: (Seq Error)+                      _lhsOlocals :: (Set Name)+                      _lhsOoutput :: Rule+                      _patternOcon :: Constructor+                      _patternOnt :: Nonterminal+                      _patternIcontainsVars :: Bool+                      _patternIcopy :: Pattern+                      _patternIdefinedAttrs :: (Set (Name,Name))+                      _patternIerrors :: (Seq Error)+                      _patternIlocals :: (Set Name)+                      _patternIoutput :: Pattern+                      -- "DefaultRules.ag"(line 420, column 11)+                      __tup2 =+                          multiRule _output     _lhsIuniq+                      -- "DefaultRules.ag"(line 420, column 11)+                      (_lhsOoutputs,_) =+                          __tup2+                      -- "DefaultRules.ag"(line 420, column 11)+                      (_,_lhsOuniq) =+                          __tup2+                      -- use rule "DefaultRules.ag"(line 391, column 46)+                      _lhsOcontainsVars =+                          _patternIcontainsVars+                      -- use rule "DefaultRules.ag"(line 371, column 23)+                      _lhsOdefinedAttrs =+                          _patternIdefinedAttrs+                      -- use rule "DefaultRules.ag"(line 107, column 19)+                      _lhsOerrors =+                          _patternIerrors+                      -- use rule "DefaultRules.ag"(line 370, column 23)+                      _lhsOlocals =+                          _patternIlocals+                      -- self rule+                      _output =+                          Rule _patternIoutput rhs_ owrt_ origin_+                      -- self rule+                      _lhsOoutput =+                          _output+                      -- copy rule (down)+                      _patternOcon =+                          _lhsIcon+                      -- copy rule (down)+                      _patternOnt =+                          _lhsInt+                      ( _patternIcontainsVars,_patternIcopy,_patternIdefinedAttrs,_patternIerrors,_patternIlocals,_patternIoutput) =+                          (pattern_ _patternOcon _patternOnt )+                  in  ( _lhsOcontainsVars,_lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput,_lhsOoutputs,_lhsOuniq))) )+-- Rules -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         con                  : Constructor+         nt                   : Nonterminal+      chained attribute:+         uniq                 : Int+      synthesized attributes:+         definedAttrs         : Set (Name,Name)+         errors               : Seq Error+         locals               : Set Name+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Rule+         child tl             : Rules+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Rules :: Rules ->+             T_Rules+sem_Rules list  =+    (Prelude.foldr sem_Rules_Cons sem_Rules_Nil (Prelude.map sem_Rule list) )+-- semantic domain+newtype T_Rules = T_Rules (Constructor ->+                           Nonterminal ->+                           Int ->+                           ( (Set (Name,Name)),(Seq Error),(Set Name),Rules,Int))+data Inh_Rules = Inh_Rules {con_Inh_Rules :: Constructor,nt_Inh_Rules :: Nonterminal,uniq_Inh_Rules :: Int}+data Syn_Rules = Syn_Rules {definedAttrs_Syn_Rules :: Set (Name,Name),errors_Syn_Rules :: Seq Error,locals_Syn_Rules :: Set Name,output_Syn_Rules :: Rules,uniq_Syn_Rules :: Int}+wrap_Rules (T_Rules sem ) (Inh_Rules _lhsIcon _lhsInt _lhsIuniq )  =+    (let ( _lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput,_lhsOuniq) =+             (sem _lhsIcon _lhsInt _lhsIuniq )+     in  (Syn_Rules _lhsOdefinedAttrs _lhsOerrors _lhsOlocals _lhsOoutput _lhsOuniq ))+sem_Rules_Cons :: T_Rule ->+                  T_Rules ->+                  T_Rules+sem_Rules_Cons (T_Rule hd_ ) (T_Rules tl_ )  =+    (T_Rules (\ _lhsIcon+                _lhsInt+                _lhsIuniq ->+                  (let _lhsOoutput :: Rules+                       _lhsOdefinedAttrs :: (Set (Name,Name))+                       _lhsOerrors :: (Seq Error)+                       _lhsOlocals :: (Set Name)+                       _lhsOuniq :: Int+                       _hdOcon :: Constructor+                       _hdOnt :: Nonterminal+                       _hdOuniq :: Int+                       _tlOcon :: Constructor+                       _tlOnt :: Nonterminal+                       _tlOuniq :: Int+                       _hdIcontainsVars :: Bool+                       _hdIdefinedAttrs :: (Set (Name,Name))+                       _hdIerrors :: (Seq Error)+                       _hdIlocals :: (Set Name)+                       _hdIoutput :: Rule+                       _hdIoutputs :: Rules+                       _hdIuniq :: Int+                       _tlIdefinedAttrs :: (Set (Name,Name))+                       _tlIerrors :: (Seq Error)+                       _tlIlocals :: (Set Name)+                       _tlIoutput :: Rules+                       _tlIuniq :: Int+                       -- "DefaultRules.ag"(line 416, column 10)+                       _lhsOoutput =+                           if _hdIcontainsVars then _hdIoutputs ++ _tlIoutput else _tlIoutput+                       -- use rule "DefaultRules.ag"(line 371, column 23)+                       _lhsOdefinedAttrs =+                           _hdIdefinedAttrs `Set.union` _tlIdefinedAttrs+                       -- use rule "DefaultRules.ag"(line 107, column 19)+                       _lhsOerrors =+                           _hdIerrors Seq.<> _tlIerrors+                       -- use rule "DefaultRules.ag"(line 370, column 23)+                       _lhsOlocals =+                           _hdIlocals `Set.union` _tlIlocals+                       -- self rule+                       _output =+                           (:) _hdIoutput _tlIoutput+                       -- copy rule (up)+                       _lhsOuniq =+                           _tlIuniq+                       -- copy rule (down)+                       _hdOcon =+                           _lhsIcon+                       -- copy rule (down)+                       _hdOnt =+                           _lhsInt+                       -- copy rule (down)+                       _hdOuniq =+                           _lhsIuniq+                       -- copy rule (down)+                       _tlOcon =+                           _lhsIcon+                       -- copy rule (down)+                       _tlOnt =+                           _lhsInt+                       -- copy rule (chain)+                       _tlOuniq =+                           _hdIuniq+                       ( _hdIcontainsVars,_hdIdefinedAttrs,_hdIerrors,_hdIlocals,_hdIoutput,_hdIoutputs,_hdIuniq) =+                           (hd_ _hdOcon _hdOnt _hdOuniq )+                       ( _tlIdefinedAttrs,_tlIerrors,_tlIlocals,_tlIoutput,_tlIuniq) =+                           (tl_ _tlOcon _tlOnt _tlOuniq )+                   in  ( _lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput,_lhsOuniq))) )+sem_Rules_Nil :: T_Rules+sem_Rules_Nil  =+    (T_Rules (\ _lhsIcon+                _lhsInt+                _lhsIuniq ->+                  (let _lhsOdefinedAttrs :: (Set (Name,Name))+                       _lhsOerrors :: (Seq Error)+                       _lhsOlocals :: (Set Name)+                       _lhsOoutput :: Rules+                       _lhsOuniq :: Int+                       -- use rule "DefaultRules.ag"(line 371, column 23)+                       _lhsOdefinedAttrs =+                           Set.empty+                       -- use rule "DefaultRules.ag"(line 107, column 19)+                       _lhsOerrors =+                           Seq.empty+                       -- use rule "DefaultRules.ag"(line 370, column 23)+                       _lhsOlocals =+                           Set.empty+                       -- self rule+                       _output =+                           []+                       -- self rule+                       _lhsOoutput =+                           _output+                       -- copy rule (chain)+                       _lhsOuniq =+                           _lhsIuniq+                   in  ( _lhsOdefinedAttrs,_lhsOerrors,_lhsOlocals,_lhsOoutput,_lhsOuniq))) )+-- TypeSig -----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         output               : SELF+   alternatives:+      alternative TypeSig:+         child name           : {Name}+         child tp             : {Type}+         visit 0:+            local output      : _+-}+-- cata+sem_TypeSig :: TypeSig ->+               T_TypeSig+sem_TypeSig (TypeSig _name _tp )  =+    (sem_TypeSig_TypeSig _name _tp )+-- semantic domain+newtype T_TypeSig = T_TypeSig (( TypeSig))+data Inh_TypeSig = Inh_TypeSig {}+data Syn_TypeSig = Syn_TypeSig {output_Syn_TypeSig :: TypeSig}+wrap_TypeSig (T_TypeSig sem ) (Inh_TypeSig )  =+    (let ( _lhsOoutput) =+             (sem )+     in  (Syn_TypeSig _lhsOoutput ))+sem_TypeSig_TypeSig :: Name ->+                       Type ->+                       T_TypeSig+sem_TypeSig_TypeSig name_ tp_  =+    (T_TypeSig (let _lhsOoutput :: TypeSig+                    -- self rule+                    _output =+                        TypeSig name_ tp_+                    -- self rule+                    _lhsOoutput =+                        _output+                in  ( _lhsOoutput)) )+-- TypeSigs ----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : TypeSig+         child tl             : TypeSigs+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_TypeSigs :: TypeSigs ->+                T_TypeSigs+sem_TypeSigs list  =+    (Prelude.foldr sem_TypeSigs_Cons sem_TypeSigs_Nil (Prelude.map sem_TypeSig list) )+-- semantic domain+newtype T_TypeSigs = T_TypeSigs (( TypeSigs))+data Inh_TypeSigs = Inh_TypeSigs {}+data Syn_TypeSigs = Syn_TypeSigs {output_Syn_TypeSigs :: TypeSigs}+wrap_TypeSigs (T_TypeSigs sem ) (Inh_TypeSigs )  =+    (let ( _lhsOoutput) =+             (sem )+     in  (Syn_TypeSigs _lhsOoutput ))+sem_TypeSigs_Cons :: T_TypeSig ->+                     T_TypeSigs ->+                     T_TypeSigs+sem_TypeSigs_Cons (T_TypeSig hd_ ) (T_TypeSigs tl_ )  =+    (T_TypeSigs (let _lhsOoutput :: TypeSigs+                     _hdIoutput :: TypeSig+                     _tlIoutput :: TypeSigs+                     -- self rule+                     _output =+                         (:) _hdIoutput _tlIoutput+                     -- self rule+                     _lhsOoutput =+                         _output+                     ( _hdIoutput) =+                         (hd_ )+                     ( _tlIoutput) =+                         (tl_ )+                 in  ( _lhsOoutput)) )+sem_TypeSigs_Nil :: T_TypeSigs+sem_TypeSigs_Nil  =+    (T_TypeSigs (let _lhsOoutput :: TypeSigs+                     -- self rule+                     _output =+                         []+                     -- self rule+                     _lhsOoutput =+                         _output+                 in  ( _lhsOoutput)) )
+ src-derived/Desugar.hs view
@@ -0,0 +1,1837 @@++-- UUAGC 0.9.5 (Desugar.ag)+module Desugar where++import qualified Data.Set as Set+import qualified Data.Map as Map+import Data.Map(Map)+import qualified UU.DData.Seq as Seq+import UU.DData.Seq(Seq,(<>))+import UU.Scanner.Position(Pos(..))+import Maybe++import AbstractSyntax+import ErrorMessages+import Options+import HsToken+import HsTokenScanner+import TokenDef++-- AbstractSyntax.ag imports+import Data.Set(Set)+import Data.Map(Map)+import Patterns    (Pattern(..),Patterns)+import Expression  (Expression(..))+import CommonTypes++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)++import UU.Scanner.Position(Pos)++import CommonTypes+import UU.Scanner.Position(Pos)++addl :: Int -> Pos -> Pos+addl n (Pos l c f) = Pos (l+n) c f++maybeError :: a -> Error -> Maybe a -> (a, Seq Error)+maybeError def err mb+  = maybe (def, Seq.single err) (\r -> (r, Seq.empty)) mb++findField :: Name -> Name -> [(Name,Name)] -> Maybe Name+findField fld attr list+  | fld == _FIRST = f list+  | fld == _LAST  = f (reverse list)+  | otherwise     = Just fld+  where+    f = lookup attr+-- Alternative -------------------------------------------------+{-+   visit 0:+      inherited attribute:+         nt                   : Nonterminal+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Alternative:+         child con            : {Constructor}+         child children       : Children+         child rules          : Rules+         child typeSigs       : TypeSigs+         visit 0:+            local output      : _+-}+-- cata+sem_Alternative :: Alternative ->+                   T_Alternative+sem_Alternative (Alternative _con _children _rules _typeSigs )  =+    (sem_Alternative_Alternative _con (sem_Children _children ) (sem_Rules _rules ) (sem_TypeSigs _typeSigs ) )+-- semantic domain+newtype T_Alternative = T_Alternative (Nonterminal ->+                                       ( (Seq Error),Alternative))+data Inh_Alternative = Inh_Alternative {nt_Inh_Alternative :: Nonterminal}+data Syn_Alternative = Syn_Alternative {errors_Syn_Alternative :: Seq Error,output_Syn_Alternative :: Alternative}+wrap_Alternative (T_Alternative sem ) (Inh_Alternative _lhsInt )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem _lhsInt )+     in  (Syn_Alternative _lhsOerrors _lhsOoutput ))+sem_Alternative_Alternative :: Constructor ->+                               T_Children ->+                               T_Rules ->+                               T_TypeSigs ->+                               T_Alternative+sem_Alternative_Alternative con_ (T_Children children_ ) (T_Rules rules_ ) (T_TypeSigs typeSigs_ )  =+    (T_Alternative (\ _lhsInt ->+                        (let _rulesOcon :: Constructor+                             _rulesOdefs :: (Set (Name, Name))+                             _lhsOerrors :: (Seq Error)+                             _lhsOoutput :: Alternative+                             _rulesOchildInhs :: ([(Name, Name)])+                             _rulesOchildSyns :: ([(Name, Name)])+                             _rulesOnt :: Nonterminal+                             _childrenIchildInhs :: ([(Name, Name)])+                             _childrenIchildSyns :: ([(Name, Name)])+                             _childrenIoutput :: Children+                             _rulesIdefsCollect :: (Set (Name, Name))+                             _rulesIerrors :: (Seq Error)+                             _rulesIoutput :: Rules+                             _typeSigsIoutput :: TypeSigs+                             -- "Desugar.ag"(line 149, column 7)+                             _rulesOcon =+                                 con_+                             -- "Desugar.ag"(line 165, column 7)+                             _rulesOdefs =+                                 _rulesIdefsCollect+                             -- use rule "Desugar.ag"(line 30, column 144)+                             _lhsOerrors =+                                 _rulesIerrors+                             -- self rule+                             _output =+                                 Alternative con_ _childrenIoutput _rulesIoutput _typeSigsIoutput+                             -- self rule+                             _lhsOoutput =+                                 _output+                             -- copy rule (chain)+                             _rulesOchildInhs =+                                 _childrenIchildInhs+                             -- copy rule (chain)+                             _rulesOchildSyns =+                                 _childrenIchildSyns+                             -- copy rule (down)+                             _rulesOnt =+                                 _lhsInt+                             ( _childrenIchildInhs,_childrenIchildSyns,_childrenIoutput) =+                                 (children_ )+                             ( _rulesIdefsCollect,_rulesIerrors,_rulesIoutput) =+                                 (rules_ _rulesOchildInhs _rulesOchildSyns _rulesOcon _rulesOdefs _rulesOnt )+                             ( _typeSigsIoutput) =+                                 (typeSigs_ )+                         in  ( _lhsOerrors,_lhsOoutput))) )+-- Alternatives ------------------------------------------------+{-+   visit 0:+      inherited attribute:+         nt                   : Nonterminal+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Alternative+         child tl             : Alternatives+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Alternatives :: Alternatives ->+                    T_Alternatives+sem_Alternatives list  =+    (Prelude.foldr sem_Alternatives_Cons sem_Alternatives_Nil (Prelude.map sem_Alternative list) )+-- semantic domain+newtype T_Alternatives = T_Alternatives (Nonterminal ->+                                         ( (Seq Error),Alternatives))+data Inh_Alternatives = Inh_Alternatives {nt_Inh_Alternatives :: Nonterminal}+data Syn_Alternatives = Syn_Alternatives {errors_Syn_Alternatives :: Seq Error,output_Syn_Alternatives :: Alternatives}+wrap_Alternatives (T_Alternatives sem ) (Inh_Alternatives _lhsInt )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem _lhsInt )+     in  (Syn_Alternatives _lhsOerrors _lhsOoutput ))+sem_Alternatives_Cons :: T_Alternative ->+                         T_Alternatives ->+                         T_Alternatives+sem_Alternatives_Cons (T_Alternative hd_ ) (T_Alternatives tl_ )  =+    (T_Alternatives (\ _lhsInt ->+                         (let _lhsOerrors :: (Seq Error)+                              _lhsOoutput :: Alternatives+                              _hdOnt :: Nonterminal+                              _tlOnt :: Nonterminal+                              _hdIerrors :: (Seq Error)+                              _hdIoutput :: Alternative+                              _tlIerrors :: (Seq Error)+                              _tlIoutput :: Alternatives+                              -- use rule "Desugar.ag"(line 30, column 144)+                              _lhsOerrors =+                                  _hdIerrors Seq.<> _tlIerrors+                              -- self rule+                              _output =+                                  (:) _hdIoutput _tlIoutput+                              -- self rule+                              _lhsOoutput =+                                  _output+                              -- copy rule (down)+                              _hdOnt =+                                  _lhsInt+                              -- copy rule (down)+                              _tlOnt =+                                  _lhsInt+                              ( _hdIerrors,_hdIoutput) =+                                  (hd_ _hdOnt )+                              ( _tlIerrors,_tlIoutput) =+                                  (tl_ _tlOnt )+                          in  ( _lhsOerrors,_lhsOoutput))) )+sem_Alternatives_Nil :: T_Alternatives+sem_Alternatives_Nil  =+    (T_Alternatives (\ _lhsInt ->+                         (let _lhsOerrors :: (Seq Error)+                              _lhsOoutput :: Alternatives+                              -- use rule "Desugar.ag"(line 30, column 144)+                              _lhsOerrors =+                                  Seq.empty+                              -- self rule+                              _output =+                                  []+                              -- self rule+                              _lhsOoutput =+                                  _output+                          in  ( _lhsOerrors,_lhsOoutput))) )+-- Child -------------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         output               : SELF+   alternatives:+      alternative Child:+         child name           : {Name}+         child tp             : {Type}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child higherOrder    : {Bool}+         visit 0:+            local output      : _+-}+-- cata+sem_Child :: Child ->+             T_Child+sem_Child (Child _name _tp _inh _syn _higherOrder )  =+    (sem_Child_Child _name _tp _inh _syn _higherOrder )+-- semantic domain+newtype T_Child = T_Child (( ([(Name, Name)]),([(Name, Name)]),Child))+data Inh_Child = Inh_Child {}+data Syn_Child = Syn_Child {childInhs_Syn_Child :: [(Name, Name)],childSyns_Syn_Child :: [(Name, Name)],output_Syn_Child :: Child}+wrap_Child (T_Child sem ) (Inh_Child )  =+    (let ( _lhsOchildInhs,_lhsOchildSyns,_lhsOoutput) =+             (sem )+     in  (Syn_Child _lhsOchildInhs _lhsOchildSyns _lhsOoutput ))+sem_Child_Child :: Name ->+                   Type ->+                   Attributes ->+                   Attributes ->+                   Bool ->+                   T_Child+sem_Child_Child name_ tp_ inh_ syn_ higherOrder_  =+    (T_Child (let _lhsOchildInhs :: ([(Name, Name)])+                  _lhsOchildSyns :: ([(Name, Name)])+                  _lhsOoutput :: Child+                  -- "Desugar.ag"(line 118, column 7)+                  _lhsOchildInhs =+                      [(i, name_) | i <- Map.keys inh_ ]+                  -- "Desugar.ag"(line 119, column 7)+                  _lhsOchildSyns =+                      [(s, name_) | s <- Map.keys syn_ ]+                  -- self rule+                  _output =+                      Child name_ tp_ inh_ syn_ higherOrder_+                  -- self rule+                  _lhsOoutput =+                      _output+              in  ( _lhsOchildInhs,_lhsOchildSyns,_lhsOoutput)) )+-- Children ----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Child+         child tl             : Children+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Children :: Children ->+                T_Children+sem_Children list  =+    (Prelude.foldr sem_Children_Cons sem_Children_Nil (Prelude.map sem_Child list) )+-- semantic domain+newtype T_Children = T_Children (( ([(Name, Name)]),([(Name, Name)]),Children))+data Inh_Children = Inh_Children {}+data Syn_Children = Syn_Children {childInhs_Syn_Children :: [(Name, Name)],childSyns_Syn_Children :: [(Name, Name)],output_Syn_Children :: Children}+wrap_Children (T_Children sem ) (Inh_Children )  =+    (let ( _lhsOchildInhs,_lhsOchildSyns,_lhsOoutput) =+             (sem )+     in  (Syn_Children _lhsOchildInhs _lhsOchildSyns _lhsOoutput ))+sem_Children_Cons :: T_Child ->+                     T_Children ->+                     T_Children+sem_Children_Cons (T_Child hd_ ) (T_Children tl_ )  =+    (T_Children (let _lhsOchildInhs :: ([(Name, Name)])+                     _lhsOchildSyns :: ([(Name, Name)])+                     _lhsOoutput :: Children+                     _hdIchildInhs :: ([(Name, Name)])+                     _hdIchildSyns :: ([(Name, Name)])+                     _hdIoutput :: Child+                     _tlIchildInhs :: ([(Name, Name)])+                     _tlIchildSyns :: ([(Name, Name)])+                     _tlIoutput :: Children+                     -- use rule "Desugar.ag"(line 113, column 48)+                     _lhsOchildInhs =+                         _hdIchildInhs ++ _tlIchildInhs+                     -- use rule "Desugar.ag"(line 113, column 48)+                     _lhsOchildSyns =+                         _hdIchildSyns ++ _tlIchildSyns+                     -- self rule+                     _output =+                         (:) _hdIoutput _tlIoutput+                     -- self rule+                     _lhsOoutput =+                         _output+                     ( _hdIchildInhs,_hdIchildSyns,_hdIoutput) =+                         (hd_ )+                     ( _tlIchildInhs,_tlIchildSyns,_tlIoutput) =+                         (tl_ )+                 in  ( _lhsOchildInhs,_lhsOchildSyns,_lhsOoutput)) )+sem_Children_Nil :: T_Children+sem_Children_Nil  =+    (T_Children (let _lhsOchildInhs :: ([(Name, Name)])+                     _lhsOchildSyns :: ([(Name, Name)])+                     _lhsOoutput :: Children+                     -- use rule "Desugar.ag"(line 113, column 48)+                     _lhsOchildInhs =+                         []+                     -- use rule "Desugar.ag"(line 113, column 48)+                     _lhsOchildSyns =+                         []+                     -- self rule+                     _output =+                         []+                     -- self rule+                     _lhsOoutput =+                         _output+                 in  ( _lhsOchildInhs,_lhsOchildSyns,_lhsOoutput)) )+-- Expression --------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         nt                   : Nonterminal+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Expression:+         child pos            : {Pos}+         child txt            : {String}+         visit 0:+            local tokens      : _+            local _tup1       : _+            local txt'        : _+            local output      : _+-}+-- cata+sem_Expression :: Expression ->+                  T_Expression+sem_Expression (Expression _pos _txt )  =+    (sem_Expression_Expression _pos _txt )+-- semantic domain+newtype T_Expression = T_Expression (([(Name, Name)]) ->+                                     ([(Name, Name)]) ->+                                     Constructor ->+                                     Nonterminal ->+                                     ( (Seq Error),Expression))+data Inh_Expression = Inh_Expression {childInhs_Inh_Expression :: [(Name, Name)],childSyns_Inh_Expression :: [(Name, Name)],con_Inh_Expression :: Constructor,nt_Inh_Expression :: Nonterminal}+data Syn_Expression = Syn_Expression {errors_Syn_Expression :: Seq Error,output_Syn_Expression :: Expression}+wrap_Expression (T_Expression sem ) (Inh_Expression _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )+     in  (Syn_Expression _lhsOerrors _lhsOoutput ))+sem_Expression_Expression :: Pos ->+                             String ->+                             T_Expression+sem_Expression_Expression pos_ txt_  =+    (T_Expression (\ _lhsIchildInhs+                     _lhsIchildSyns+                     _lhsIcon+                     _lhsInt ->+                       (let _lhsOerrors :: (Seq Error)+                            _lhsOoutput :: Expression+                            -- "Desugar.ag"(line 41, column 7)+                            _tokens =+                                lexTokens pos_ txt_+                            -- "Desugar.ag"(line 42, column 7)+                            __tup1 =+                                let inh = Inh_HsTokensRoot { childInhs_Inh_HsTokensRoot = _lhsIchildInhs+                                                           , childSyns_Inh_HsTokensRoot = _lhsIchildSyns+                                                           , nt_Inh_HsTokensRoot        = _lhsInt+                                                           , con_Inh_HsTokensRoot       = _lhsIcon+                                                           }+                                    sem = sem_HsTokensRoot (HsTokensRoot _tokens    )+                                    syn = wrap_HsTokensRoot sem inh+                                in (txt_Syn_HsTokensRoot syn, errors_Syn_HsTokensRoot syn)+                            -- "Desugar.ag"(line 42, column 7)+                            (_txt',_) =+                                __tup1+                            -- "Desugar.ag"(line 42, column 7)+                            (_,_lhsOerrors) =+                                __tup1+                            -- "Desugar.ag"(line 50, column 7)+                            _lhsOoutput =+                                Expression pos_ _txt'+                            -- self rule+                            _output =+                                Expression pos_ txt_+                        in  ( _lhsOerrors,_lhsOoutput))) )+-- Grammar -----------------------------------------------------+{-+   visit 0:+      inherited attribute:+         options              : Options+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Grammar:+         child typeSyns       : {TypeSyns}+         child useMap         : {UseMap}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : Productions+         child pragmas        : {PragmaMap}+         child manualAttrOrderMap : {AttrOrderMap}+         visit 0:+            local output      : _+-}+-- cata+sem_Grammar :: Grammar ->+               T_Grammar+sem_Grammar (Grammar _typeSyns _useMap _derivings _wrappers _prods _pragmas _manualAttrOrderMap )  =+    (sem_Grammar_Grammar _typeSyns _useMap _derivings _wrappers (sem_Productions _prods ) _pragmas _manualAttrOrderMap )+-- semantic domain+newtype T_Grammar = T_Grammar (Options ->+                               ( (Seq Error),Grammar))+data Inh_Grammar = Inh_Grammar {options_Inh_Grammar :: Options}+data Syn_Grammar = Syn_Grammar {errors_Syn_Grammar :: Seq Error,output_Syn_Grammar :: Grammar}+wrap_Grammar (T_Grammar sem ) (Inh_Grammar _lhsIoptions )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem _lhsIoptions )+     in  (Syn_Grammar _lhsOerrors _lhsOoutput ))+sem_Grammar_Grammar :: TypeSyns ->+                       UseMap ->+                       Derivings ->+                       (Set Nonterminal) ->+                       T_Productions ->+                       PragmaMap ->+                       AttrOrderMap ->+                       T_Grammar+sem_Grammar_Grammar typeSyns_ useMap_ derivings_ wrappers_ (T_Productions prods_ ) pragmas_ manualAttrOrderMap_  =+    (T_Grammar (\ _lhsIoptions ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOoutput :: Grammar+                         _prodsIerrors :: (Seq Error)+                         _prodsIoutput :: Productions+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             _prodsIerrors+                         -- self rule+                         _output =+                             Grammar typeSyns_ useMap_ derivings_ wrappers_ _prodsIoutput pragmas_ manualAttrOrderMap_+                         -- self rule+                         _lhsOoutput =+                             _output+                         ( _prodsIerrors,_prodsIoutput) =+                             (prods_ )+                     in  ( _lhsOerrors,_lhsOoutput))) )+-- HsToken -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         nt                   : Nonterminal+      chained attribute:+         addLines             : Int+      synthesized attributes:+         errors               : Seq Error+         tks                  : [(Pos,String)]+   alternatives:+      alternative AGField:+         child field          : {Name}+         child attr           : {Name}+         child pos            : {Pos}+         visit 0:+            local mField      : _+            local field'      : _+      alternative AGLocal:+         child var            : {Name}+         child pos            : {Pos}+      alternative CharToken:+         child value          : {String}+         child pos            : {Pos}+      alternative Err:+         child mesg           : {String}+         child pos            : {Pos}+      alternative HsToken:+         child value          : {String}+         child pos            : {Pos}+      alternative StrToken:+         child value          : {String}+         child pos            : {Pos}+-}+-- cata+sem_HsToken :: HsToken ->+               T_HsToken+sem_HsToken (AGField _field _attr _pos )  =+    (sem_HsToken_AGField _field _attr _pos )+sem_HsToken (AGLocal _var _pos )  =+    (sem_HsToken_AGLocal _var _pos )+sem_HsToken (CharToken _value _pos )  =+    (sem_HsToken_CharToken _value _pos )+sem_HsToken (Err _mesg _pos )  =+    (sem_HsToken_Err _mesg _pos )+sem_HsToken (HsToken _value _pos )  =+    (sem_HsToken_HsToken _value _pos )+sem_HsToken (StrToken _value _pos )  =+    (sem_HsToken_StrToken _value _pos )+-- semantic domain+newtype T_HsToken = T_HsToken (Int ->+                               ([(Name, Name)]) ->+                               ([(Name, Name)]) ->+                               Constructor ->+                               Nonterminal ->+                               ( Int,(Seq Error),([(Pos,String)])))+data Inh_HsToken = Inh_HsToken {addLines_Inh_HsToken :: Int,childInhs_Inh_HsToken :: [(Name, Name)],childSyns_Inh_HsToken :: [(Name, Name)],con_Inh_HsToken :: Constructor,nt_Inh_HsToken :: Nonterminal}+data Syn_HsToken = Syn_HsToken {addLines_Syn_HsToken :: Int,errors_Syn_HsToken :: Seq Error,tks_Syn_HsToken :: [(Pos,String)]}+wrap_HsToken (T_HsToken sem ) (Inh_HsToken _lhsIaddLines _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )  =+    (let ( _lhsOaddLines,_lhsOerrors,_lhsOtks) =+             (sem _lhsIaddLines _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )+     in  (Syn_HsToken _lhsOaddLines _lhsOerrors _lhsOtks ))+sem_HsToken_AGField :: Name ->+                       Name ->+                       Pos ->+                       T_HsToken+sem_HsToken_AGField field_ attr_ pos_  =+    (T_HsToken (\ _lhsIaddLines+                  _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsInt ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOaddLines :: Int+                         _lhsOtks :: ([(Pos,String)])+                         -- "Desugar.ag"(line 67, column 7)+                         _mField =+                             findField field_ attr_ _lhsIchildSyns+                         -- "Desugar.ag"(line 69, column 7)+                         _field' =+                             maybe field_ id _mField+                         -- "Desugar.ag"(line 70, column 7)+                         _lhsOerrors =+                             maybe (Seq.single (UndefAttr _lhsInt _lhsIcon field_ (Ident "<ANY>" (getPos field_)))) (const Seq.empty) _mField+                         -- "Desugar.ag"(line 72, column 7)+                         _lhsOaddLines =+                             if length (getName field_) < length (getName _field'    )+                             then _lhsIaddLines + 1+                             else _lhsIaddLines+                         -- "Desugar.ag"(line 76, column 7)+                         _lhsOtks =+                             [(addl _lhsIaddLines pos_, "@" ++ show _field'     ++ "." ++ show attr_)]+                     in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+sem_HsToken_AGLocal :: Name ->+                       Pos ->+                       T_HsToken+sem_HsToken_AGLocal var_ pos_  =+    (T_HsToken (\ _lhsIaddLines+                  _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsInt ->+                    (let _lhsOtks :: ([(Pos,String)])+                         _lhsOerrors :: (Seq Error)+                         _lhsOaddLines :: Int+                         -- "Desugar.ag"(line 65, column 7)+                         _lhsOtks =+                             [(addl _lhsIaddLines pos_, "@" ++ show var_)]+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             Seq.empty+                         -- copy rule (chain)+                         _lhsOaddLines =+                             _lhsIaddLines+                     in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+sem_HsToken_CharToken :: String ->+                         Pos ->+                         T_HsToken+sem_HsToken_CharToken value_ pos_  =+    (T_HsToken (\ _lhsIaddLines+                  _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsInt ->+                    (let _lhsOtks :: ([(Pos,String)])+                         _lhsOerrors :: (Seq Error)+                         _lhsOaddLines :: Int+                         -- "Desugar.ag"(line 80, column 7)+                         _lhsOtks =+                             [(addl _lhsIaddLines pos_, if null value_ then "" else showCharShort (head value_))]+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             Seq.empty+                         -- copy rule (chain)+                         _lhsOaddLines =+                             _lhsIaddLines+                     in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+sem_HsToken_Err :: String ->+                   Pos ->+                   T_HsToken+sem_HsToken_Err mesg_ pos_  =+    (T_HsToken (\ _lhsIaddLines+                  _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsInt ->+                    (let _lhsOtks :: ([(Pos,String)])+                         _lhsOerrors :: (Seq Error)+                         _lhsOaddLines :: Int+                         -- "Desugar.ag"(line 84, column 7)+                         _lhsOtks =+                             [(addl _lhsIaddLines pos_, "***" ++ mesg_ ++ "***")]+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             Seq.empty+                         -- copy rule (chain)+                         _lhsOaddLines =+                             _lhsIaddLines+                     in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+sem_HsToken_HsToken :: String ->+                       Pos ->+                       T_HsToken+sem_HsToken_HsToken value_ pos_  =+    (T_HsToken (\ _lhsIaddLines+                  _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsInt ->+                    (let _lhsOtks :: ([(Pos,String)])+                         _lhsOerrors :: (Seq Error)+                         _lhsOaddLines :: Int+                         -- "Desugar.ag"(line 78, column 7)+                         _lhsOtks =+                             [(addl _lhsIaddLines pos_, value_)]+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             Seq.empty+                         -- copy rule (chain)+                         _lhsOaddLines =+                             _lhsIaddLines+                     in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+sem_HsToken_StrToken :: String ->+                        Pos ->+                        T_HsToken+sem_HsToken_StrToken value_ pos_  =+    (T_HsToken (\ _lhsIaddLines+                  _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsInt ->+                    (let _lhsOtks :: ([(Pos,String)])+                         _lhsOerrors :: (Seq Error)+                         _lhsOaddLines :: Int+                         -- "Desugar.ag"(line 82, column 7)+                         _lhsOtks =+                             [(addl _lhsIaddLines pos_, showStrShort value_)]+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             Seq.empty+                         -- copy rule (chain)+                         _lhsOaddLines =+                             _lhsIaddLines+                     in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+-- HsTokens ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         nt                   : Nonterminal+      chained attribute:+         addLines             : Int+      synthesized attributes:+         errors               : Seq Error+         tks                  : [(Pos,String)]+   alternatives:+      alternative Cons:+         child hd             : HsToken+         child tl             : HsTokens+      alternative Nil:+-}+-- cata+sem_HsTokens :: HsTokens ->+                T_HsTokens+sem_HsTokens list  =+    (Prelude.foldr sem_HsTokens_Cons sem_HsTokens_Nil (Prelude.map sem_HsToken list) )+-- semantic domain+newtype T_HsTokens = T_HsTokens (Int ->+                                 ([(Name, Name)]) ->+                                 ([(Name, Name)]) ->+                                 Constructor ->+                                 Nonterminal ->+                                 ( Int,(Seq Error),([(Pos,String)])))+data Inh_HsTokens = Inh_HsTokens {addLines_Inh_HsTokens :: Int,childInhs_Inh_HsTokens :: [(Name, Name)],childSyns_Inh_HsTokens :: [(Name, Name)],con_Inh_HsTokens :: Constructor,nt_Inh_HsTokens :: Nonterminal}+data Syn_HsTokens = Syn_HsTokens {addLines_Syn_HsTokens :: Int,errors_Syn_HsTokens :: Seq Error,tks_Syn_HsTokens :: [(Pos,String)]}+wrap_HsTokens (T_HsTokens sem ) (Inh_HsTokens _lhsIaddLines _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )  =+    (let ( _lhsOaddLines,_lhsOerrors,_lhsOtks) =+             (sem _lhsIaddLines _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )+     in  (Syn_HsTokens _lhsOaddLines _lhsOerrors _lhsOtks ))+sem_HsTokens_Cons :: T_HsToken ->+                     T_HsTokens ->+                     T_HsTokens+sem_HsTokens_Cons (T_HsToken hd_ ) (T_HsTokens tl_ )  =+    (T_HsTokens (\ _lhsIaddLines+                   _lhsIchildInhs+                   _lhsIchildSyns+                   _lhsIcon+                   _lhsInt ->+                     (let _lhsOerrors :: (Seq Error)+                          _lhsOtks :: ([(Pos,String)])+                          _lhsOaddLines :: Int+                          _hdOaddLines :: Int+                          _hdOchildInhs :: ([(Name, Name)])+                          _hdOchildSyns :: ([(Name, Name)])+                          _hdOcon :: Constructor+                          _hdOnt :: Nonterminal+                          _tlOaddLines :: Int+                          _tlOchildInhs :: ([(Name, Name)])+                          _tlOchildSyns :: ([(Name, Name)])+                          _tlOcon :: Constructor+                          _tlOnt :: Nonterminal+                          _hdIaddLines :: Int+                          _hdIerrors :: (Seq Error)+                          _hdItks :: ([(Pos,String)])+                          _tlIaddLines :: Int+                          _tlIerrors :: (Seq Error)+                          _tlItks :: ([(Pos,String)])+                          -- use rule "Desugar.ag"(line 30, column 144)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- use rule "Desugar.ag"(line 62, column 46)+                          _lhsOtks =+                              _hdItks ++ _tlItks+                          -- copy rule (up)+                          _lhsOaddLines =+                              _tlIaddLines+                          -- copy rule (down)+                          _hdOaddLines =+                              _lhsIaddLines+                          -- copy rule (down)+                          _hdOchildInhs =+                              _lhsIchildInhs+                          -- copy rule (down)+                          _hdOchildSyns =+                              _lhsIchildSyns+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (chain)+                          _tlOaddLines =+                              _hdIaddLines+                          -- copy rule (down)+                          _tlOchildInhs =+                              _lhsIchildInhs+                          -- copy rule (down)+                          _tlOchildSyns =+                              _lhsIchildSyns+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          ( _hdIaddLines,_hdIerrors,_hdItks) =+                              (hd_ _hdOaddLines _hdOchildInhs _hdOchildSyns _hdOcon _hdOnt )+                          ( _tlIaddLines,_tlIerrors,_tlItks) =+                              (tl_ _tlOaddLines _tlOchildInhs _tlOchildSyns _tlOcon _tlOnt )+                      in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+sem_HsTokens_Nil :: T_HsTokens+sem_HsTokens_Nil  =+    (T_HsTokens (\ _lhsIaddLines+                   _lhsIchildInhs+                   _lhsIchildSyns+                   _lhsIcon+                   _lhsInt ->+                     (let _lhsOerrors :: (Seq Error)+                          _lhsOtks :: ([(Pos,String)])+                          _lhsOaddLines :: Int+                          -- use rule "Desugar.ag"(line 30, column 144)+                          _lhsOerrors =+                              Seq.empty+                          -- use rule "Desugar.ag"(line 62, column 46)+                          _lhsOtks =+                              []+                          -- copy rule (chain)+                          _lhsOaddLines =+                              _lhsIaddLines+                      in  ( _lhsOaddLines,_lhsOerrors,_lhsOtks))) )+-- HsTokensRoot ------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         nt                   : Nonterminal+      synthesized attributes:+         errors               : Seq Error+         tks                  : [(Pos,String)]+         txt                  : String+   alternatives:+      alternative HsTokensRoot:+         child tokens         : HsTokens+-}+-- cata+sem_HsTokensRoot :: HsTokensRoot ->+                    T_HsTokensRoot+sem_HsTokensRoot (HsTokensRoot _tokens )  =+    (sem_HsTokensRoot_HsTokensRoot (sem_HsTokens _tokens ) )+-- semantic domain+newtype T_HsTokensRoot = T_HsTokensRoot (([(Name, Name)]) ->+                                         ([(Name, Name)]) ->+                                         Constructor ->+                                         Nonterminal ->+                                         ( (Seq Error),([(Pos,String)]),String))+data Inh_HsTokensRoot = Inh_HsTokensRoot {childInhs_Inh_HsTokensRoot :: [(Name, Name)],childSyns_Inh_HsTokensRoot :: [(Name, Name)],con_Inh_HsTokensRoot :: Constructor,nt_Inh_HsTokensRoot :: Nonterminal}+data Syn_HsTokensRoot = Syn_HsTokensRoot {errors_Syn_HsTokensRoot :: Seq Error,tks_Syn_HsTokensRoot :: [(Pos,String)],txt_Syn_HsTokensRoot :: String}+wrap_HsTokensRoot (T_HsTokensRoot sem ) (Inh_HsTokensRoot _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )  =+    (let ( _lhsOerrors,_lhsOtks,_lhsOtxt) =+             (sem _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsInt )+     in  (Syn_HsTokensRoot _lhsOerrors _lhsOtks _lhsOtxt ))+sem_HsTokensRoot_HsTokensRoot :: T_HsTokens ->+                                 T_HsTokensRoot+sem_HsTokensRoot_HsTokensRoot (T_HsTokens tokens_ )  =+    (T_HsTokensRoot (\ _lhsIchildInhs+                       _lhsIchildSyns+                       _lhsIcon+                       _lhsInt ->+                         (let _lhsOtxt :: String+                              _tokensOaddLines :: Int+                              _lhsOerrors :: (Seq Error)+                              _lhsOtks :: ([(Pos,String)])+                              _tokensOchildInhs :: ([(Name, Name)])+                              _tokensOchildSyns :: ([(Name, Name)])+                              _tokensOcon :: Constructor+                              _tokensOnt :: Nonterminal+                              _tokensIaddLines :: Int+                              _tokensIerrors :: (Seq Error)+                              _tokensItks :: ([(Pos,String)])+                              -- "Desugar.ag"(line 55, column 7)+                              _lhsOtxt =+                                  unlines $ showTokens _tokensItks+                              -- "Desugar.ag"(line 60, column 7)+                              _tokensOaddLines =+                                  0+                              -- use rule "Desugar.ag"(line 30, column 144)+                              _lhsOerrors =+                                  _tokensIerrors+                              -- use rule "Desugar.ag"(line 62, column 46)+                              _lhsOtks =+                                  _tokensItks+                              -- copy rule (down)+                              _tokensOchildInhs =+                                  _lhsIchildInhs+                              -- copy rule (down)+                              _tokensOchildSyns =+                                  _lhsIchildSyns+                              -- copy rule (down)+                              _tokensOcon =+                                  _lhsIcon+                              -- copy rule (down)+                              _tokensOnt =+                                  _lhsInt+                              ( _tokensIaddLines,_tokensIerrors,_tokensItks) =+                                  (tokens_ _tokensOaddLines _tokensOchildInhs _tokensOchildSyns _tokensOcon _tokensOnt )+                          in  ( _lhsOerrors,_lhsOtks,_lhsOtxt))) )+-- Pattern -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         defs                 : Set (Name, Name)+         nt                   : Nonterminal+      synthesized attributes:+         copy                 : SELF+         defsCollect          : Set (Name, Name)+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local _tup2       : _+            local field'      : _+            local err1        : _+            local err2        : _+            local def         : _+            local copy        : _+            local output      : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+            local output      : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+            local output      : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+            local output      : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts )  =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+sem_Pattern (Constr _name _pats )  =+    (sem_Pattern_Constr _name (sem_Patterns _pats ) )+sem_Pattern (Product _pos _pats )  =+    (sem_Pattern_Product _pos (sem_Patterns _pats ) )+sem_Pattern (Underscore _pos )  =+    (sem_Pattern_Underscore _pos )+-- semantic domain+newtype T_Pattern = T_Pattern (([(Name, Name)]) ->+                               ([(Name, Name)]) ->+                               Constructor ->+                               (Set (Name, Name)) ->+                               Nonterminal ->+                               ( Pattern,(Set (Name, Name)),(Seq Error),Pattern))+data Inh_Pattern = Inh_Pattern {childInhs_Inh_Pattern :: [(Name, Name)],childSyns_Inh_Pattern :: [(Name, Name)],con_Inh_Pattern :: Constructor,defs_Inh_Pattern :: Set (Name, Name),nt_Inh_Pattern :: Nonterminal}+data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: Pattern,defsCollect_Syn_Pattern :: Set (Name, Name),errors_Syn_Pattern :: Seq Error,output_Syn_Pattern :: Pattern}+wrap_Pattern (T_Pattern sem ) (Inh_Pattern _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )  =+    (let ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput) =+             (sem _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )+     in  (Syn_Pattern _lhsOcopy _lhsOdefsCollect _lhsOerrors _lhsOoutput ))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ )  =+    (T_Pattern (\ _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsIdefs+                  _lhsInt ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOoutput :: Pattern+                         _lhsOdefsCollect :: (Set (Name, Name))+                         _lhsOcopy :: Pattern+                         _patOchildInhs :: ([(Name, Name)])+                         _patOchildSyns :: ([(Name, Name)])+                         _patOcon :: Constructor+                         _patOdefs :: (Set (Name, Name))+                         _patOnt :: Nonterminal+                         _partsOchildInhs :: ([(Name, Name)])+                         _partsOchildSyns :: ([(Name, Name)])+                         _partsOcon :: Constructor+                         _partsOdefs :: (Set (Name, Name))+                         _partsOnt :: Nonterminal+                         _patIcopy :: Pattern+                         _patIdefsCollect :: (Set (Name, Name))+                         _patIerrors :: (Seq Error)+                         _patIoutput :: Pattern+                         _partsIcopy :: Patterns+                         _partsIdefsCollect :: (Set (Name, Name))+                         _partsIerrors :: (Seq Error)+                         _partsIoutput :: Patterns+                         -- "Desugar.ag"(line 98, column 7)+                         __tup2 =+                             maybeError field_ (UndefAttr _lhsInt _lhsIcon (Ident "<ANY>" (getPos field_)) attr_) $+                               findField field_ attr_ _lhsIchildInhs+                         -- "Desugar.ag"(line 98, column 7)+                         (_field',_) =+                             __tup2+                         -- "Desugar.ag"(line 98, column 7)+                         (_,_err1) =+                             __tup2+                         -- "Desugar.ag"(line 100, column 7)+                         _err2 =+                             if _field'     == field_+                             then Seq.empty+                             else if (_field'    , attr_) `Set.member` _lhsIdefs+                                  then Seq.single $ DupRule _lhsInt _lhsIcon field_ attr_ _field'+                                  else Seq.empty+                         -- "Desugar.ag"(line 105, column 7)+                         _lhsOerrors =+                             _err1     Seq.<> _err2     Seq.<> _patIerrors <> _partsIerrors+                         -- "Desugar.ag"(line 106, column 7)+                         _lhsOoutput =+                             Alias _field'     attr_ _patIoutput _partsIoutput+                         -- "Desugar.ag"(line 159, column 7)+                         _def =+                             Set.singleton (field_, attr_)+                         -- "Desugar.ag"(line 160, column 7)+                         _lhsOdefsCollect =+                             _def     `Set.union` _patIdefsCollect `Set.union` _partsIdefsCollect+                         -- self rule+                         _copy =+                             Alias field_ attr_ _patIcopy _partsIcopy+                         -- self rule+                         _output =+                             Alias field_ attr_ _patIoutput _partsIoutput+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- copy rule (down)+                         _patOchildInhs =+                             _lhsIchildInhs+                         -- copy rule (down)+                         _patOchildSyns =+                             _lhsIchildSyns+                         -- copy rule (down)+                         _patOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patOdefs =+                             _lhsIdefs+                         -- copy rule (down)+                         _patOnt =+                             _lhsInt+                         -- copy rule (down)+                         _partsOchildInhs =+                             _lhsIchildInhs+                         -- copy rule (down)+                         _partsOchildSyns =+                             _lhsIchildSyns+                         -- copy rule (down)+                         _partsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _partsOdefs =+                             _lhsIdefs+                         -- copy rule (down)+                         _partsOnt =+                             _lhsInt+                         ( _patIcopy,_patIdefsCollect,_patIerrors,_patIoutput) =+                             (pat_ _patOchildInhs _patOchildSyns _patOcon _patOdefs _patOnt )+                         ( _partsIcopy,_partsIdefsCollect,_partsIerrors,_partsIoutput) =+                             (parts_ _partsOchildInhs _partsOchildSyns _partsOcon _partsOdefs _partsOnt )+                     in  ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsIdefs+                  _lhsInt ->+                    (let _lhsOdefsCollect :: (Set (Name, Name))+                         _lhsOerrors :: (Seq Error)+                         _lhsOcopy :: Pattern+                         _lhsOoutput :: Pattern+                         _patsOchildInhs :: ([(Name, Name)])+                         _patsOchildSyns :: ([(Name, Name)])+                         _patsOcon :: Constructor+                         _patsOdefs :: (Set (Name, Name))+                         _patsOnt :: Nonterminal+                         _patsIcopy :: Patterns+                         _patsIdefsCollect :: (Set (Name, Name))+                         _patsIerrors :: (Seq Error)+                         _patsIoutput :: Patterns+                         -- use rule "Desugar.ag"(line 156, column 52)+                         _lhsOdefsCollect =+                             _patsIdefsCollect+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             _patsIerrors+                         -- self rule+                         _copy =+                             Constr name_ _patsIcopy+                         -- self rule+                         _output =+                             Constr name_ _patsIoutput+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- self rule+                         _lhsOoutput =+                             _output+                         -- copy rule (down)+                         _patsOchildInhs =+                             _lhsIchildInhs+                         -- copy rule (down)+                         _patsOchildSyns =+                             _lhsIchildSyns+                         -- copy rule (down)+                         _patsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patsOdefs =+                             _lhsIdefs+                         -- copy rule (down)+                         _patsOnt =+                             _lhsInt+                         ( _patsIcopy,_patsIdefsCollect,_patsIerrors,_patsIoutput) =+                             (pats_ _patsOchildInhs _patsOchildSyns _patsOcon _patsOdefs _patsOnt )+                     in  ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsIdefs+                  _lhsInt ->+                    (let _lhsOdefsCollect :: (Set (Name, Name))+                         _lhsOerrors :: (Seq Error)+                         _lhsOcopy :: Pattern+                         _lhsOoutput :: Pattern+                         _patsOchildInhs :: ([(Name, Name)])+                         _patsOchildSyns :: ([(Name, Name)])+                         _patsOcon :: Constructor+                         _patsOdefs :: (Set (Name, Name))+                         _patsOnt :: Nonterminal+                         _patsIcopy :: Patterns+                         _patsIdefsCollect :: (Set (Name, Name))+                         _patsIerrors :: (Seq Error)+                         _patsIoutput :: Patterns+                         -- use rule "Desugar.ag"(line 156, column 52)+                         _lhsOdefsCollect =+                             _patsIdefsCollect+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             _patsIerrors+                         -- self rule+                         _copy =+                             Product pos_ _patsIcopy+                         -- self rule+                         _output =+                             Product pos_ _patsIoutput+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- self rule+                         _lhsOoutput =+                             _output+                         -- copy rule (down)+                         _patsOchildInhs =+                             _lhsIchildInhs+                         -- copy rule (down)+                         _patsOchildSyns =+                             _lhsIchildSyns+                         -- copy rule (down)+                         _patsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patsOdefs =+                             _lhsIdefs+                         -- copy rule (down)+                         _patsOnt =+                             _lhsInt+                         ( _patsIcopy,_patsIdefsCollect,_patsIerrors,_patsIoutput) =+                             (pats_ _patsOchildInhs _patsOchildSyns _patsOcon _patsOdefs _patsOnt )+                     in  ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_  =+    (T_Pattern (\ _lhsIchildInhs+                  _lhsIchildSyns+                  _lhsIcon+                  _lhsIdefs+                  _lhsInt ->+                    (let _lhsOdefsCollect :: (Set (Name, Name))+                         _lhsOerrors :: (Seq Error)+                         _lhsOcopy :: Pattern+                         _lhsOoutput :: Pattern+                         -- use rule "Desugar.ag"(line 156, column 52)+                         _lhsOdefsCollect =+                             Set.empty+                         -- use rule "Desugar.ag"(line 30, column 144)+                         _lhsOerrors =+                             Seq.empty+                         -- self rule+                         _copy =+                             Underscore pos_+                         -- self rule+                         _output =+                             Underscore pos_+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- self rule+                         _lhsOoutput =+                             _output+                     in  ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+-- Patterns ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         defs                 : Set (Name, Name)+         nt                   : Nonterminal+      synthesized attributes:+         copy                 : SELF+         defsCollect          : Set (Name, Name)+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+            local output      : _+      alternative Nil:+         visit 0:+            local copy        : _+            local output      : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list  =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns (([(Name, Name)]) ->+                                 ([(Name, Name)]) ->+                                 Constructor ->+                                 (Set (Name, Name)) ->+                                 Nonterminal ->+                                 ( Patterns,(Set (Name, Name)),(Seq Error),Patterns))+data Inh_Patterns = Inh_Patterns {childInhs_Inh_Patterns :: [(Name, Name)],childSyns_Inh_Patterns :: [(Name, Name)],con_Inh_Patterns :: Constructor,defs_Inh_Patterns :: Set (Name, Name),nt_Inh_Patterns :: Nonterminal}+data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: Patterns,defsCollect_Syn_Patterns :: Set (Name, Name),errors_Syn_Patterns :: Seq Error,output_Syn_Patterns :: Patterns}+wrap_Patterns (T_Patterns sem ) (Inh_Patterns _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )  =+    (let ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput) =+             (sem _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )+     in  (Syn_Patterns _lhsOcopy _lhsOdefsCollect _lhsOerrors _lhsOoutput ))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =+    (T_Patterns (\ _lhsIchildInhs+                   _lhsIchildSyns+                   _lhsIcon+                   _lhsIdefs+                   _lhsInt ->+                     (let _lhsOdefsCollect :: (Set (Name, Name))+                          _lhsOerrors :: (Seq Error)+                          _lhsOcopy :: Patterns+                          _lhsOoutput :: Patterns+                          _hdOchildInhs :: ([(Name, Name)])+                          _hdOchildSyns :: ([(Name, Name)])+                          _hdOcon :: Constructor+                          _hdOdefs :: (Set (Name, Name))+                          _hdOnt :: Nonterminal+                          _tlOchildInhs :: ([(Name, Name)])+                          _tlOchildSyns :: ([(Name, Name)])+                          _tlOcon :: Constructor+                          _tlOdefs :: (Set (Name, Name))+                          _tlOnt :: Nonterminal+                          _hdIcopy :: Pattern+                          _hdIdefsCollect :: (Set (Name, Name))+                          _hdIerrors :: (Seq Error)+                          _hdIoutput :: Pattern+                          _tlIcopy :: Patterns+                          _tlIdefsCollect :: (Set (Name, Name))+                          _tlIerrors :: (Seq Error)+                          _tlIoutput :: Patterns+                          -- use rule "Desugar.ag"(line 156, column 52)+                          _lhsOdefsCollect =+                              _hdIdefsCollect `Set.union` _tlIdefsCollect+                          -- use rule "Desugar.ag"(line 30, column 144)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- self rule+                          _copy =+                              (:) _hdIcopy _tlIcopy+                          -- self rule+                          _output =+                              (:) _hdIoutput _tlIoutput+                          -- self rule+                          _lhsOcopy =+                              _copy+                          -- self rule+                          _lhsOoutput =+                              _output+                          -- copy rule (down)+                          _hdOchildInhs =+                              _lhsIchildInhs+                          -- copy rule (down)+                          _hdOchildSyns =+                              _lhsIchildSyns+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOdefs =+                              _lhsIdefs+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (down)+                          _tlOchildInhs =+                              _lhsIchildInhs+                          -- copy rule (down)+                          _tlOchildSyns =+                              _lhsIchildSyns+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _tlOdefs =+                              _lhsIdefs+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          ( _hdIcopy,_hdIdefsCollect,_hdIerrors,_hdIoutput) =+                              (hd_ _hdOchildInhs _hdOchildSyns _hdOcon _hdOdefs _hdOnt )+                          ( _tlIcopy,_tlIdefsCollect,_tlIerrors,_tlIoutput) =+                              (tl_ _tlOchildInhs _tlOchildSyns _tlOcon _tlOdefs _tlOnt )+                      in  ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (\ _lhsIchildInhs+                   _lhsIchildSyns+                   _lhsIcon+                   _lhsIdefs+                   _lhsInt ->+                     (let _lhsOdefsCollect :: (Set (Name, Name))+                          _lhsOerrors :: (Seq Error)+                          _lhsOcopy :: Patterns+                          _lhsOoutput :: Patterns+                          -- use rule "Desugar.ag"(line 156, column 52)+                          _lhsOdefsCollect =+                              Set.empty+                          -- use rule "Desugar.ag"(line 30, column 144)+                          _lhsOerrors =+                              Seq.empty+                          -- self rule+                          _copy =+                              []+                          -- self rule+                          _output =+                              []+                          -- self rule+                          _lhsOcopy =+                              _copy+                          -- self rule+                          _lhsOoutput =+                              _output+                      in  ( _lhsOcopy,_lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+-- Production --------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Production:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : Alternatives+         visit 0:+            local output      : _+-}+-- cata+sem_Production :: Production ->+                  T_Production+sem_Production (Production _nt _inh _syn _alts )  =+    (sem_Production_Production _nt _inh _syn (sem_Alternatives _alts ) )+-- semantic domain+newtype T_Production = T_Production (( (Seq Error),Production))+data Inh_Production = Inh_Production {}+data Syn_Production = Syn_Production {errors_Syn_Production :: Seq Error,output_Syn_Production :: Production}+wrap_Production (T_Production sem ) (Inh_Production )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem )+     in  (Syn_Production _lhsOerrors _lhsOoutput ))+sem_Production_Production :: Nonterminal ->+                             Attributes ->+                             Attributes ->+                             T_Alternatives ->+                             T_Production+sem_Production_Production nt_ inh_ syn_ (T_Alternatives alts_ )  =+    (T_Production (let _altsOnt :: Nonterminal+                       _lhsOerrors :: (Seq Error)+                       _lhsOoutput :: Production+                       _altsIerrors :: (Seq Error)+                       _altsIoutput :: Alternatives+                       -- "Desugar.ag"(line 145, column 7)+                       _altsOnt =+                           nt_+                       -- use rule "Desugar.ag"(line 30, column 144)+                       _lhsOerrors =+                           _altsIerrors+                       -- self rule+                       _output =+                           Production nt_ inh_ syn_ _altsIoutput+                       -- self rule+                       _lhsOoutput =+                           _output+                       ( _altsIerrors,_altsIoutput) =+                           (alts_ _altsOnt )+                   in  ( _lhsOerrors,_lhsOoutput)) )+-- Productions -------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Production+         child tl             : Productions+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Productions :: Productions ->+                   T_Productions+sem_Productions list  =+    (Prelude.foldr sem_Productions_Cons sem_Productions_Nil (Prelude.map sem_Production list) )+-- semantic domain+newtype T_Productions = T_Productions (( (Seq Error),Productions))+data Inh_Productions = Inh_Productions {}+data Syn_Productions = Syn_Productions {errors_Syn_Productions :: Seq Error,output_Syn_Productions :: Productions}+wrap_Productions (T_Productions sem ) (Inh_Productions )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem )+     in  (Syn_Productions _lhsOerrors _lhsOoutput ))+sem_Productions_Cons :: T_Production ->+                        T_Productions ->+                        T_Productions+sem_Productions_Cons (T_Production hd_ ) (T_Productions tl_ )  =+    (T_Productions (let _lhsOerrors :: (Seq Error)+                        _lhsOoutput :: Productions+                        _hdIerrors :: (Seq Error)+                        _hdIoutput :: Production+                        _tlIerrors :: (Seq Error)+                        _tlIoutput :: Productions+                        -- use rule "Desugar.ag"(line 30, column 144)+                        _lhsOerrors =+                            _hdIerrors Seq.<> _tlIerrors+                        -- self rule+                        _output =+                            (:) _hdIoutput _tlIoutput+                        -- self rule+                        _lhsOoutput =+                            _output+                        ( _hdIerrors,_hdIoutput) =+                            (hd_ )+                        ( _tlIerrors,_tlIoutput) =+                            (tl_ )+                    in  ( _lhsOerrors,_lhsOoutput)) )+sem_Productions_Nil :: T_Productions+sem_Productions_Nil  =+    (T_Productions (let _lhsOerrors :: (Seq Error)+                        _lhsOoutput :: Productions+                        -- use rule "Desugar.ag"(line 30, column 144)+                        _lhsOerrors =+                            Seq.empty+                        -- self rule+                        _output =+                            []+                        -- self rule+                        _lhsOoutput =+                            _output+                    in  ( _lhsOerrors,_lhsOoutput)) )+-- Rule --------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         defs                 : Set (Name, Name)+         nt                   : Nonterminal+      synthesized attributes:+         defsCollect          : Set (Name, Name)+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Rule:+         child pattern        : Pattern+         child rhs            : Expression+         child owrt           : {Bool}+         child origin         : {String}+         visit 0:+            local output      : _+-}+-- cata+sem_Rule :: Rule ->+            T_Rule+sem_Rule (Rule _pattern _rhs _owrt _origin )  =+    (sem_Rule_Rule (sem_Pattern _pattern ) (sem_Expression _rhs ) _owrt _origin )+-- semantic domain+newtype T_Rule = T_Rule (([(Name, Name)]) ->+                         ([(Name, Name)]) ->+                         Constructor ->+                         (Set (Name, Name)) ->+                         Nonterminal ->+                         ( (Set (Name, Name)),(Seq Error),Rule))+data Inh_Rule = Inh_Rule {childInhs_Inh_Rule :: [(Name, Name)],childSyns_Inh_Rule :: [(Name, Name)],con_Inh_Rule :: Constructor,defs_Inh_Rule :: Set (Name, Name),nt_Inh_Rule :: Nonterminal}+data Syn_Rule = Syn_Rule {defsCollect_Syn_Rule :: Set (Name, Name),errors_Syn_Rule :: Seq Error,output_Syn_Rule :: Rule}+wrap_Rule (T_Rule sem ) (Inh_Rule _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )  =+    (let ( _lhsOdefsCollect,_lhsOerrors,_lhsOoutput) =+             (sem _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )+     in  (Syn_Rule _lhsOdefsCollect _lhsOerrors _lhsOoutput ))+sem_Rule_Rule :: T_Pattern ->+                 T_Expression ->+                 Bool ->+                 String ->+                 T_Rule+sem_Rule_Rule (T_Pattern pattern_ ) (T_Expression rhs_ ) owrt_ origin_  =+    (T_Rule (\ _lhsIchildInhs+               _lhsIchildSyns+               _lhsIcon+               _lhsIdefs+               _lhsInt ->+                 (let _lhsOdefsCollect :: (Set (Name, Name))+                      _lhsOerrors :: (Seq Error)+                      _lhsOoutput :: Rule+                      _patternOchildInhs :: ([(Name, Name)])+                      _patternOchildSyns :: ([(Name, Name)])+                      _patternOcon :: Constructor+                      _patternOdefs :: (Set (Name, Name))+                      _patternOnt :: Nonterminal+                      _rhsOchildInhs :: ([(Name, Name)])+                      _rhsOchildSyns :: ([(Name, Name)])+                      _rhsOcon :: Constructor+                      _rhsOnt :: Nonterminal+                      _patternIcopy :: Pattern+                      _patternIdefsCollect :: (Set (Name, Name))+                      _patternIerrors :: (Seq Error)+                      _patternIoutput :: Pattern+                      _rhsIerrors :: (Seq Error)+                      _rhsIoutput :: Expression+                      -- use rule "Desugar.ag"(line 156, column 52)+                      _lhsOdefsCollect =+                          _patternIdefsCollect+                      -- use rule "Desugar.ag"(line 30, column 144)+                      _lhsOerrors =+                          _patternIerrors Seq.<> _rhsIerrors+                      -- self rule+                      _output =+                          Rule _patternIoutput _rhsIoutput owrt_ origin_+                      -- self rule+                      _lhsOoutput =+                          _output+                      -- copy rule (down)+                      _patternOchildInhs =+                          _lhsIchildInhs+                      -- copy rule (down)+                      _patternOchildSyns =+                          _lhsIchildSyns+                      -- copy rule (down)+                      _patternOcon =+                          _lhsIcon+                      -- copy rule (down)+                      _patternOdefs =+                          _lhsIdefs+                      -- copy rule (down)+                      _patternOnt =+                          _lhsInt+                      -- copy rule (down)+                      _rhsOchildInhs =+                          _lhsIchildInhs+                      -- copy rule (down)+                      _rhsOchildSyns =+                          _lhsIchildSyns+                      -- copy rule (down)+                      _rhsOcon =+                          _lhsIcon+                      -- copy rule (down)+                      _rhsOnt =+                          _lhsInt+                      ( _patternIcopy,_patternIdefsCollect,_patternIerrors,_patternIoutput) =+                          (pattern_ _patternOchildInhs _patternOchildSyns _patternOcon _patternOdefs _patternOnt )+                      ( _rhsIerrors,_rhsIoutput) =+                          (rhs_ _rhsOchildInhs _rhsOchildSyns _rhsOcon _rhsOnt )+                  in  ( _lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+-- Rules -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         childInhs            : [(Name, Name)]+         childSyns            : [(Name, Name)]+         con                  : Constructor+         defs                 : Set (Name, Name)+         nt                   : Nonterminal+      synthesized attributes:+         defsCollect          : Set (Name, Name)+         errors               : Seq Error+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : Rule+         child tl             : Rules+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_Rules :: Rules ->+             T_Rules+sem_Rules list  =+    (Prelude.foldr sem_Rules_Cons sem_Rules_Nil (Prelude.map sem_Rule list) )+-- semantic domain+newtype T_Rules = T_Rules (([(Name, Name)]) ->+                           ([(Name, Name)]) ->+                           Constructor ->+                           (Set (Name, Name)) ->+                           Nonterminal ->+                           ( (Set (Name, Name)),(Seq Error),Rules))+data Inh_Rules = Inh_Rules {childInhs_Inh_Rules :: [(Name, Name)],childSyns_Inh_Rules :: [(Name, Name)],con_Inh_Rules :: Constructor,defs_Inh_Rules :: Set (Name, Name),nt_Inh_Rules :: Nonterminal}+data Syn_Rules = Syn_Rules {defsCollect_Syn_Rules :: Set (Name, Name),errors_Syn_Rules :: Seq Error,output_Syn_Rules :: Rules}+wrap_Rules (T_Rules sem ) (Inh_Rules _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )  =+    (let ( _lhsOdefsCollect,_lhsOerrors,_lhsOoutput) =+             (sem _lhsIchildInhs _lhsIchildSyns _lhsIcon _lhsIdefs _lhsInt )+     in  (Syn_Rules _lhsOdefsCollect _lhsOerrors _lhsOoutput ))+sem_Rules_Cons :: T_Rule ->+                  T_Rules ->+                  T_Rules+sem_Rules_Cons (T_Rule hd_ ) (T_Rules tl_ )  =+    (T_Rules (\ _lhsIchildInhs+                _lhsIchildSyns+                _lhsIcon+                _lhsIdefs+                _lhsInt ->+                  (let _lhsOdefsCollect :: (Set (Name, Name))+                       _lhsOerrors :: (Seq Error)+                       _lhsOoutput :: Rules+                       _hdOchildInhs :: ([(Name, Name)])+                       _hdOchildSyns :: ([(Name, Name)])+                       _hdOcon :: Constructor+                       _hdOdefs :: (Set (Name, Name))+                       _hdOnt :: Nonterminal+                       _tlOchildInhs :: ([(Name, Name)])+                       _tlOchildSyns :: ([(Name, Name)])+                       _tlOcon :: Constructor+                       _tlOdefs :: (Set (Name, Name))+                       _tlOnt :: Nonterminal+                       _hdIdefsCollect :: (Set (Name, Name))+                       _hdIerrors :: (Seq Error)+                       _hdIoutput :: Rule+                       _tlIdefsCollect :: (Set (Name, Name))+                       _tlIerrors :: (Seq Error)+                       _tlIoutput :: Rules+                       -- use rule "Desugar.ag"(line 156, column 52)+                       _lhsOdefsCollect =+                           _hdIdefsCollect `Set.union` _tlIdefsCollect+                       -- use rule "Desugar.ag"(line 30, column 144)+                       _lhsOerrors =+                           _hdIerrors Seq.<> _tlIerrors+                       -- self rule+                       _output =+                           (:) _hdIoutput _tlIoutput+                       -- self rule+                       _lhsOoutput =+                           _output+                       -- copy rule (down)+                       _hdOchildInhs =+                           _lhsIchildInhs+                       -- copy rule (down)+                       _hdOchildSyns =+                           _lhsIchildSyns+                       -- copy rule (down)+                       _hdOcon =+                           _lhsIcon+                       -- copy rule (down)+                       _hdOdefs =+                           _lhsIdefs+                       -- copy rule (down)+                       _hdOnt =+                           _lhsInt+                       -- copy rule (down)+                       _tlOchildInhs =+                           _lhsIchildInhs+                       -- copy rule (down)+                       _tlOchildSyns =+                           _lhsIchildSyns+                       -- copy rule (down)+                       _tlOcon =+                           _lhsIcon+                       -- copy rule (down)+                       _tlOdefs =+                           _lhsIdefs+                       -- copy rule (down)+                       _tlOnt =+                           _lhsInt+                       ( _hdIdefsCollect,_hdIerrors,_hdIoutput) =+                           (hd_ _hdOchildInhs _hdOchildSyns _hdOcon _hdOdefs _hdOnt )+                       ( _tlIdefsCollect,_tlIerrors,_tlIoutput) =+                           (tl_ _tlOchildInhs _tlOchildSyns _tlOcon _tlOdefs _tlOnt )+                   in  ( _lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+sem_Rules_Nil :: T_Rules+sem_Rules_Nil  =+    (T_Rules (\ _lhsIchildInhs+                _lhsIchildSyns+                _lhsIcon+                _lhsIdefs+                _lhsInt ->+                  (let _lhsOdefsCollect :: (Set (Name, Name))+                       _lhsOerrors :: (Seq Error)+                       _lhsOoutput :: Rules+                       -- use rule "Desugar.ag"(line 156, column 52)+                       _lhsOdefsCollect =+                           Set.empty+                       -- use rule "Desugar.ag"(line 30, column 144)+                       _lhsOerrors =+                           Seq.empty+                       -- self rule+                       _output =+                           []+                       -- self rule+                       _lhsOoutput =+                           _output+                   in  ( _lhsOdefsCollect,_lhsOerrors,_lhsOoutput))) )+-- TypeSig -----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         output               : SELF+   alternatives:+      alternative TypeSig:+         child name           : {Name}+         child tp             : {Type}+         visit 0:+            local output      : _+-}+-- cata+sem_TypeSig :: TypeSig ->+               T_TypeSig+sem_TypeSig (TypeSig _name _tp )  =+    (sem_TypeSig_TypeSig _name _tp )+-- semantic domain+newtype T_TypeSig = T_TypeSig (( TypeSig))+data Inh_TypeSig = Inh_TypeSig {}+data Syn_TypeSig = Syn_TypeSig {output_Syn_TypeSig :: TypeSig}+wrap_TypeSig (T_TypeSig sem ) (Inh_TypeSig )  =+    (let ( _lhsOoutput) =+             (sem )+     in  (Syn_TypeSig _lhsOoutput ))+sem_TypeSig_TypeSig :: Name ->+                       Type ->+                       T_TypeSig+sem_TypeSig_TypeSig name_ tp_  =+    (T_TypeSig (let _lhsOoutput :: TypeSig+                    -- self rule+                    _output =+                        TypeSig name_ tp_+                    -- self rule+                    _lhsOoutput =+                        _output+                in  ( _lhsOoutput)) )+-- TypeSigs ----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         output               : SELF+   alternatives:+      alternative Cons:+         child hd             : TypeSig+         child tl             : TypeSigs+         visit 0:+            local output      : _+      alternative Nil:+         visit 0:+            local output      : _+-}+-- cata+sem_TypeSigs :: TypeSigs ->+                T_TypeSigs+sem_TypeSigs list  =+    (Prelude.foldr sem_TypeSigs_Cons sem_TypeSigs_Nil (Prelude.map sem_TypeSig list) )+-- semantic domain+newtype T_TypeSigs = T_TypeSigs (( TypeSigs))+data Inh_TypeSigs = Inh_TypeSigs {}+data Syn_TypeSigs = Syn_TypeSigs {output_Syn_TypeSigs :: TypeSigs}+wrap_TypeSigs (T_TypeSigs sem ) (Inh_TypeSigs )  =+    (let ( _lhsOoutput) =+             (sem )+     in  (Syn_TypeSigs _lhsOoutput ))+sem_TypeSigs_Cons :: T_TypeSig ->+                     T_TypeSigs ->+                     T_TypeSigs+sem_TypeSigs_Cons (T_TypeSig hd_ ) (T_TypeSigs tl_ )  =+    (T_TypeSigs (let _lhsOoutput :: TypeSigs+                     _hdIoutput :: TypeSig+                     _tlIoutput :: TypeSigs+                     -- self rule+                     _output =+                         (:) _hdIoutput _tlIoutput+                     -- self rule+                     _lhsOoutput =+                         _output+                     ( _hdIoutput) =+                         (hd_ )+                     ( _tlIoutput) =+                         (tl_ )+                 in  ( _lhsOoutput)) )+sem_TypeSigs_Nil :: T_TypeSigs+sem_TypeSigs_Nil  =+    (T_TypeSigs (let _lhsOoutput :: TypeSigs+                     -- self rule+                     _output =+                         []+                     -- self rule+                     _lhsOoutput =+                         _output+                 in  ( _lhsOoutput)) )
+ src-derived/ErrorMessages.hs view
@@ -0,0 +1,155 @@++-- UUAGC 0.9.5 (ErrorMessages.ag)+module ErrorMessages where++import UU.Scanner.Position(Pos)+import Pretty+import DepTypes(Trace)+import CodeSyntax+import CommonTypes+-- Error -------------------------------------------------------+{-+   alternatives:+      alternative ChildAsLocal:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child var            : {Name}+      alternative CustomError:+         child isWarning      : {Bool}+         child pos            : {Pos}+         child mesg           : {PP_Doc}+      alternative CyclicSet:+         child name           : {Name}+      alternative DirectCirc:+         child nt             : {Nonterminal}+         child o_visit        : {Bool}+         child cyclic         : {[((Name,Name),[String],[String])]}+      alternative DupAlt:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child occ1           : {Constructor}+      alternative DupChild:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child name           : {Name}+         child occ1           : {Name}+      alternative DupInhAttr:+         child nt             : {Nonterminal}+         child attr           : {Name}+         child occ1           : {Name}+      alternative DupRule:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+         child occ1           : {Name}+      alternative DupSet:+         child name           : {Nonterminal}+         child occ1           : {Nonterminal}+      alternative DupSig:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+      alternative DupSynAttr:+         child nt             : {Nonterminal}+         child attr           : {Name}+         child occ1           : {Name}+      alternative DupSynonym:+         child nt             : {Nonterminal}+         child occ1           : {Nonterminal}+      alternative ErroneousOrder:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child order          : {Dependency}+      alternative InducedCirc:+         child nt             : {Nonterminal}+         child cinter         : {CInterface}+         child cyclic         : {[((Name,Name),[String],[String])]}+      alternative InstCirc:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+         child o_visit        : {Bool}+         child path           : {[String]}+      alternative LocalCirc:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+         child o_visit        : {Bool}+         child path           : {[String]}+      alternative MissingInstSig:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+      alternative MissingRule:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+      alternative MissingTypeSig:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+      alternative ParserError:+         child pos            : {Pos}+         child problem        : {String}+         child action         : {String}+      alternative SuperfluousRule:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+      alternative UndefAlt:+         child nt             : {Nonterminal}+         child con            : {Constructor}+      alternative UndefAttr:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+      alternative UndefChild:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child name           : {Name}+      alternative UndefLocal:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child var            : {Name}+      alternative UndefNont:+         child nt             : {Nonterminal}+-}+data Error = ChildAsLocal (Nonterminal) (Constructor) (Name) +           | CustomError (Bool) (Pos) (PP_Doc) +           | CyclicSet (Name) +           | DirectCirc (Nonterminal) (Bool) ([((Name,Name),[String],[String])]) +           | DupAlt (Nonterminal) (Constructor) (Constructor) +           | DupChild (Nonterminal) (Constructor) (Name) (Name) +           | DupInhAttr (Nonterminal) (Name) (Name) +           | DupRule (Nonterminal) (Constructor) (Name) (Name) (Name) +           | DupSet (Nonterminal) (Nonterminal) +           | DupSig (Nonterminal) (Constructor) (Name) +           | DupSynAttr (Nonterminal) (Name) (Name) +           | DupSynonym (Nonterminal) (Nonterminal) +           | ErroneousOrder (Nonterminal) (Constructor) (Dependency) +           | InducedCirc (Nonterminal) (CInterface) ([((Name,Name),[String],[String])]) +           | InstCirc (Nonterminal) (Constructor) (Name) (Bool) ([String]) +           | LocalCirc (Nonterminal) (Constructor) (Name) (Bool) ([String]) +           | MissingInstSig (Nonterminal) (Constructor) (Name) +           | MissingRule (Nonterminal) (Constructor) (Name) (Name) +           | MissingTypeSig (Nonterminal) (Constructor) (Name) +           | ParserError (Pos) (String) (String) +           | SuperfluousRule (Nonterminal) (Constructor) (Name) (Name) +           | UndefAlt (Nonterminal) (Constructor) +           | UndefAttr (Nonterminal) (Constructor) (Name) (Name) +           | UndefChild (Nonterminal) (Constructor) (Name) +           | UndefLocal (Nonterminal) (Constructor) (Name) +           | UndefNont (Nonterminal) +-- Errors ------------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Error+         child tl             : Errors+      alternative Nil:+-}+type Errors = [Error]
+ src-derived/Expression.hs view
@@ -0,0 +1,13 @@++-- UUAGC 0.9.5 (Expression.ag)+module Expression where++import UU.Scanner.Position(Pos)+-- Expression --------------------------------------------------+{-+   alternatives:+      alternative Expression:+         child pos            : {Pos}+         child txt            : {String}+-}+data Expression = Expression (Pos) (String) 
+ src-derived/GenerateCode.hs view
@@ -0,0 +1,4544 @@++-- UUAGC 0.9.5 (GenerateCode.ag)+module GenerateCode where++import SequentialTypes+import Code hiding (Type)+import qualified Code+import Options+import CodeSyntax+import ErrorMessages+import GrammarInfo+import DeclBlocks++import qualified Data.Map as Map+import Data.Map(Map) +import qualified Data.Set as Set+import Data.Set(Set) +import qualified UU.DData.Seq as Seq+import UU.DData.Seq(Seq)+import UU.Scanner.Position++import Data.List(partition,intersperse,intersect,(\\))+import Maybe(fromJust,isJust)++import Patterns+import CommonTypes+import Data.Map(Map)+import Data.Set(Set)++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)++import Code (Decl,Expr)++substSelf nt tp = if tp==NT _SELF +                  then Haskell (getName nt)+                  else tp++mkLambda [] e = e+mkLambda xs e = Lambda xs e++-- dead code - replaced by mkPartitionedFunction+{-+localCpsToExpr :: Bool -> [Decl] -> DeclBlocks -> Expr+localCpsToExpr o_case nextVisitDecl+  = rec+  where+    rec cps+      = case cps of+          DeclTerminator decls expr+            -> mkLet o_case (decls ++ nextVisitDecl) expr+          DeclBlock decls (Decl lhs rhs _ _) remainder+            -> let inDecls = [ PragmaDecl ("NOINLINE " ++ internalCpsName)+                             , Decl (Fun internalCpsName [SimpleExpr internalCpsVarName])+                                    (mkLet o_case [Decl lhs (SimpleExpr internalCpsVarName) Set.empty Set.empty] (rec remainder))+                                    Set.empty Set.empty+                             ]+                   inBody = App "head" [App "(:)" [App internalCpsName [rhs], App "(:)" [App internalCpsName [rhs], SimpleExpr "[]"]]]+                   outerBody = Let inDecls inBody+                   block = mkLet o_case decls outerBody+               in block++internalCpsName :: String+internalCpsName = "internalCps_"++internalCpsVarName :: String+internalCpsVarName = "internalCps_var_"+-}++mkPartitionedFunction :: String -> Bool -> [Decl] -> [String] -> DeclBlocks -> ([Decl], Expr)+mkPartitionedFunction prefix optCase nextVisitDecls lastExprVars cpsTree+  = let inh = Inh_DeclBlocksRoot { prefix_Inh_DeclBlocksRoot = prefix+                                 , optCase_Inh_DeclBlocksRoot = optCase+                                 , nextVisitDecls_Inh_DeclBlocksRoot = nextVisitDecls+                                 , lastExprVars_Inh_DeclBlocksRoot = lastExprVars+                                 }+        sem = sem_DeclBlocksRoot (DeclBlocksRoot cpsTree)+        syn = wrap_DeclBlocksRoot sem inh+    in (lambdas_Syn_DeclBlocksRoot syn, firstCall_Syn_DeclBlocksRoot syn)++freevars :: [String] -> [Decl] -> [String]+freevars additional decls+  = Set.toList (allused `Set.difference` alldefined)+  where+    allused = Set.unions (Set.fromList additional : map usedvars decls)+    alldefined = Set.unions (map definedvars decls)+  +    usedvars (Decl _ _ _ uses) = uses+    usedvars _                 = Set.empty+    +    definedvars (Decl _ _ defs _) = defs+    definedvars _                 = Set.empty++mkBlockLambda :: Bool -> String -> [String] -> [Decl] -> Expr -> Decl+mkBlockLambda optCase name args decls expr+  = Decl lhs rhs Set.empty Set.empty+  where+    lhs = Fun name (map SimpleExpr args)+    rhs = mkLet optCase decls expr++makeLocalComment :: Int -> String -> Name -> Maybe Type -> String+makeLocalComment width what  name tp = let  x = getName name+                                            y = maybe "_" (\t -> case t of (NT nt) -> getName nt; Haskell t -> '{':t++"}") tp+                                       in   ( what ++ " " ++ x ++ replicate ((width - length x) `max` 0) ' ' ++ " : " ++ y )+++-- Lets or nested Cases?+mkLet :: Bool -> Decls -> Expr -> Expr+mkLet False decls body = Let decls body+mkLet True decls body = foldr oneCase body decls++oneCase :: Decl -> Expr -> Expr+oneCase (Decl left rhs _ _) exp = Case rhs [CaseAlt left exp]+oneCase _                   exp = exp++-- Gives the name of the visit function+funname field 0  = show field ++ "_"+funname field nr = show field ++ "_" ++ show nr++-- Gives the name of a semantic function+seqSemname :: String -> Nonterminal -> Constructor -> Int -> String+seqSemname pre nt con  0 = semname pre nt con+seqSemname pre nt con nr = semname pre nt con ++ "_" ++ show nr++-- Gives the name of a type+typeName :: Nonterminal -> Int -> String+typeName nt 0 = "T_" ++ show nt+typeName nt n = "T_" ++ show nt ++ "_" ++ show n++-- Gives the name of a visit function+visitname  ::  String -> Nonterminal -> Int -> String+visitname pre nt n =  pre ++ getName nt ++ "_" ++ show n+-- CAlternative ------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allPragmas           : PragmaMap+         inh                  : Attributes+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+         with_sig             : Bool+      chained attribute:+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         cataAlt              : Decl+         comments             : [String]+         dataAlt              : DataAlt+         decls                : Decls+         semNames             : [String]+   alternatives:+      alternative CAlternative:+         child con            : {Constructor}+         child visits         : CVisits+         child children       : {[(Name,Type,Bool)]}+         child terminals      : {[Name]}+         visit 0:+            local firstOrderChildren : _+-}+-- cata+sem_CAlternative :: CAlternative ->+                    T_CAlternative+sem_CAlternative (CAlternative _con _visits _children _terminals )  =+    (sem_CAlternative_CAlternative _con (sem_CVisits _visits ) _children _terminals )+-- semantic domain+newtype T_CAlternative = T_CAlternative (PragmaMap ->+                                         (Seq Error) ->+                                         Attributes ->+                                         Nonterminal ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         (Maybe Bool) ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         String ->+                                         Attributes ->+                                         Bool ->+                                         ( Bool,Decl,([String]),DataAlt,Decls,(Seq Error),([String])))+data Inh_CAlternative = Inh_CAlternative {allPragmas_Inh_CAlternative :: PragmaMap,errors_Inh_CAlternative :: Seq Error,inh_Inh_CAlternative :: Attributes,nt_Inh_CAlternative :: Nonterminal,o_case_Inh_CAlternative :: Bool,o_cata_Inh_CAlternative :: Bool,o_costcentre_Inh_CAlternative :: Bool,o_data_Inh_CAlternative :: Maybe Bool,o_linePragmas_Inh_CAlternative :: Bool,o_newtypes_Inh_CAlternative :: Bool,o_pretty_Inh_CAlternative :: Bool,o_rename_Inh_CAlternative :: Bool,o_sem_Inh_CAlternative :: Bool,o_sig_Inh_CAlternative :: Bool,o_splitsems_Inh_CAlternative :: Bool,o_strictwrap_Inh_CAlternative :: Bool,o_traces_Inh_CAlternative :: Bool,o_unbox_Inh_CAlternative :: Bool,prefix_Inh_CAlternative :: String,syn_Inh_CAlternative :: Attributes,with_sig_Inh_CAlternative :: Bool}+data Syn_CAlternative = Syn_CAlternative {allTpsFound_Syn_CAlternative :: Bool,cataAlt_Syn_CAlternative :: Decl,comments_Syn_CAlternative :: [String],dataAlt_Syn_CAlternative :: DataAlt,decls_Syn_CAlternative :: Decls,errors_Syn_CAlternative :: Seq Error,semNames_Syn_CAlternative :: [String]}+wrap_CAlternative (T_CAlternative sem ) (Inh_CAlternative _lhsIallPragmas _lhsIerrors _lhsIinh _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIwith_sig )  =+    (let ( _lhsOallTpsFound,_lhsOcataAlt,_lhsOcomments,_lhsOdataAlt,_lhsOdecls,_lhsOerrors,_lhsOsemNames) =+             (sem _lhsIallPragmas _lhsIerrors _lhsIinh _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIwith_sig )+     in  (Syn_CAlternative _lhsOallTpsFound _lhsOcataAlt _lhsOcomments _lhsOdataAlt _lhsOdecls _lhsOerrors _lhsOsemNames ))+sem_CAlternative_CAlternative :: Constructor ->+                                 T_CVisits ->+                                 ([(Name,Type,Bool)]) ->+                                 ([Name]) ->+                                 T_CAlternative+sem_CAlternative_CAlternative con_ (T_CVisits visits_ ) children_ terminals_  =+    (T_CAlternative (\ _lhsIallPragmas+                       _lhsIerrors+                       _lhsIinh+                       _lhsInt+                       _lhsIo_case+                       _lhsIo_cata+                       _lhsIo_costcentre+                       _lhsIo_data+                       _lhsIo_linePragmas+                       _lhsIo_newtypes+                       _lhsIo_pretty+                       _lhsIo_rename+                       _lhsIo_sem+                       _lhsIo_sig+                       _lhsIo_splitsems+                       _lhsIo_strictwrap+                       _lhsIo_traces+                       _lhsIo_unbox+                       _lhsIprefix+                       _lhsIsyn+                       _lhsIwith_sig ->+                         (let _visitsOcon :: Constructor+                              _visitsOterminals :: ([Name])+                              _visitsOnr :: Int+                              _visitsOchildren :: ([(Name,Type,Bool)])+                              _visitsOinstVisitNrs :: (Map Identifier Int)+                              _lhsOcomments :: ([String])+                              _lhsOdataAlt :: DataAlt+                              _lhsOcataAlt :: Decl+                              _lhsOallTpsFound :: Bool+                              _lhsOdecls :: Decls+                              _lhsOerrors :: (Seq Error)+                              _lhsOsemNames :: ([String])+                              _visitsOallPragmas :: PragmaMap+                              _visitsOerrors :: (Seq Error)+                              _visitsOinh :: Attributes+                              _visitsOnt :: Nonterminal+                              _visitsOo_case :: Bool+                              _visitsOo_cata :: Bool+                              _visitsOo_costcentre :: Bool+                              _visitsOo_data :: (Maybe Bool)+                              _visitsOo_linePragmas :: Bool+                              _visitsOo_newtypes :: Bool+                              _visitsOo_pretty :: Bool+                              _visitsOo_rename :: Bool+                              _visitsOo_sem :: Bool+                              _visitsOo_sig :: Bool+                              _visitsOo_splitsems :: Bool+                              _visitsOo_strictwrap :: Bool+                              _visitsOo_traces :: Bool+                              _visitsOo_unbox :: Bool+                              _visitsOprefix :: String+                              _visitsOsyn :: Attributes+                              _visitsOwith_sig :: Bool+                              _visitsIallTpsFound :: Bool+                              _visitsIcomments :: ([String])+                              _visitsIdecls :: Decls+                              _visitsIerrors :: (Seq Error)+                              _visitsIgatherInstVisitNrs :: (Map Identifier Int)+                              _visitsIintra :: Exprs+                              _visitsIintraVars :: (Set String)+                              _visitsIisNil :: Bool+                              _visitsIsemNames :: ([String])+                              -- "GenerateCode.ag"(line 78, column 20)+                              _visitsOcon =+                                  con_+                              -- "GenerateCode.ag"(line 79, column 20)+                              _visitsOterminals =+                                  terminals_+                              -- "GenerateCode.ag"(line 159, column 19)+                              _visitsOnr =+                                  0+                              -- "GenerateCode.ag"(line 261, column 19)+                              _visitsOchildren =+                                  children_+                              -- "GenerateCode.ag"(line 349, column 7)+                              _visitsOinstVisitNrs =+                                  _visitsIgatherInstVisitNrs+                              -- "GenerateCode.ag"(line 594, column 18)+                              _firstOrderChildren =+                                  filter (\(_,_,ho) -> not ho) children_+                              -- "GenerateCode.ag"(line 595, column 18)+                              _lhsOcomments =+                                  ("alternative " ++ getName con_ ++ ":")+                                  : map ind (  map (\(x,y,_) -> makeLocalComment 14 "child" x (Just y)) _firstOrderChildren+                                            ++ _visitsIcomments+                                            )+                              -- "GenerateCode.ag"(line 704, column 19)+                              _lhsOdataAlt =+                                  DataAlt (conname _lhsIo_rename _lhsInt con_) (map (\(_,t,_) -> typeToString _lhsInt t) _firstOrderChildren    )+                              -- "GenerateCode.ag"(line 759, column 18)+                              _lhsOcataAlt =+                                  let lhs = Fun (cataname _lhsIprefix _lhsInt) [lhs_pat]+                                      lhs_pat = App (conname _lhsIo_rename _lhsInt con_)+                                                    (map (\(n,_,_) -> SimpleExpr $ locname $ n) _firstOrderChildren    )+                                      rhs = App (semname _lhsIprefix _lhsInt con_)+                                                (map argument _firstOrderChildren    )+                                      argument (nm,NT tp,_) = App (cataname _lhsIprefix tp)+                                                                  [SimpleExpr (locname nm)]+                                      argument (nm, _,_)    = SimpleExpr (locname nm)+                                  in Decl lhs rhs Set.empty Set.empty+                              -- use rule "GenerateCode.ag"(line 551, column 39)+                              _lhsOallTpsFound =+                                  _visitsIallTpsFound+                              -- use rule "GenerateCode.ag"(line 626, column 46)+                              _lhsOdecls =+                                  _visitsIdecls+                              -- use rule "GenerateCode.ag"(line 564, column 32)+                              _lhsOerrors =+                                  _visitsIerrors+                              -- use rule "GenerateCode.ag"(line 774, column 63)+                              _lhsOsemNames =+                                  _visitsIsemNames+                              -- copy rule (down)+                              _visitsOallPragmas =+                                  _lhsIallPragmas+                              -- copy rule (down)+                              _visitsOerrors =+                                  _lhsIerrors+                              -- copy rule (down)+                              _visitsOinh =+                                  _lhsIinh+                              -- copy rule (down)+                              _visitsOnt =+                                  _lhsInt+                              -- copy rule (down)+                              _visitsOo_case =+                                  _lhsIo_case+                              -- copy rule (down)+                              _visitsOo_cata =+                                  _lhsIo_cata+                              -- copy rule (down)+                              _visitsOo_costcentre =+                                  _lhsIo_costcentre+                              -- copy rule (down)+                              _visitsOo_data =+                                  _lhsIo_data+                              -- copy rule (down)+                              _visitsOo_linePragmas =+                                  _lhsIo_linePragmas+                              -- copy rule (down)+                              _visitsOo_newtypes =+                                  _lhsIo_newtypes+                              -- copy rule (down)+                              _visitsOo_pretty =+                                  _lhsIo_pretty+                              -- copy rule (down)+                              _visitsOo_rename =+                                  _lhsIo_rename+                              -- copy rule (down)+                              _visitsOo_sem =+                                  _lhsIo_sem+                              -- copy rule (down)+                              _visitsOo_sig =+                                  _lhsIo_sig+                              -- copy rule (down)+                              _visitsOo_splitsems =+                                  _lhsIo_splitsems+                              -- copy rule (down)+                              _visitsOo_strictwrap =+                                  _lhsIo_strictwrap+                              -- copy rule (down)+                              _visitsOo_traces =+                                  _lhsIo_traces+                              -- copy rule (down)+                              _visitsOo_unbox =+                                  _lhsIo_unbox+                              -- copy rule (down)+                              _visitsOprefix =+                                  _lhsIprefix+                              -- copy rule (down)+                              _visitsOsyn =+                                  _lhsIsyn+                              -- copy rule (down)+                              _visitsOwith_sig =+                                  _lhsIwith_sig+                              ( _visitsIallTpsFound,_visitsIcomments,_visitsIdecls,_visitsIerrors,_visitsIgatherInstVisitNrs,_visitsIintra,_visitsIintraVars,_visitsIisNil,_visitsIsemNames) =+                                  (visits_ _visitsOallPragmas _visitsOchildren _visitsOcon _visitsOerrors _visitsOinh _visitsOinstVisitNrs _visitsOnr _visitsOnt _visitsOo_case _visitsOo_cata _visitsOo_costcentre _visitsOo_data _visitsOo_linePragmas _visitsOo_newtypes _visitsOo_pretty _visitsOo_rename _visitsOo_sem _visitsOo_sig _visitsOo_splitsems _visitsOo_strictwrap _visitsOo_traces _visitsOo_unbox _visitsOprefix _visitsOsyn _visitsOterminals _visitsOwith_sig )+                          in  ( _lhsOallTpsFound,_lhsOcataAlt,_lhsOcomments,_lhsOdataAlt,_lhsOdecls,_lhsOerrors,_lhsOsemNames))) )+-- CAlternatives -----------------------------------------------+{-+   visit 0:+      inherited attributes:+         allPragmas           : PragmaMap+         inh                  : Attributes+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+         with_sig             : Bool+      chained attribute:+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         cataAlts             : Decls+         comments             : [String]+         dataAlts             : DataAlts+         decls                : Decls+         semNames             : [String]+   alternatives:+      alternative Cons:+         child hd             : CAlternative+         child tl             : CAlternatives+      alternative Nil:+-}+-- cata+sem_CAlternatives :: CAlternatives ->+                     T_CAlternatives+sem_CAlternatives list  =+    (Prelude.foldr sem_CAlternatives_Cons sem_CAlternatives_Nil (Prelude.map sem_CAlternative list) )+-- semantic domain+newtype T_CAlternatives = T_CAlternatives (PragmaMap ->+                                           (Seq Error) ->+                                           Attributes ->+                                           Nonterminal ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           (Maybe Bool) ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           Bool ->+                                           String ->+                                           Attributes ->+                                           Bool ->+                                           ( Bool,Decls,([String]),DataAlts,Decls,(Seq Error),([String])))+data Inh_CAlternatives = Inh_CAlternatives {allPragmas_Inh_CAlternatives :: PragmaMap,errors_Inh_CAlternatives :: Seq Error,inh_Inh_CAlternatives :: Attributes,nt_Inh_CAlternatives :: Nonterminal,o_case_Inh_CAlternatives :: Bool,o_cata_Inh_CAlternatives :: Bool,o_costcentre_Inh_CAlternatives :: Bool,o_data_Inh_CAlternatives :: Maybe Bool,o_linePragmas_Inh_CAlternatives :: Bool,o_newtypes_Inh_CAlternatives :: Bool,o_pretty_Inh_CAlternatives :: Bool,o_rename_Inh_CAlternatives :: Bool,o_sem_Inh_CAlternatives :: Bool,o_sig_Inh_CAlternatives :: Bool,o_splitsems_Inh_CAlternatives :: Bool,o_strictwrap_Inh_CAlternatives :: Bool,o_traces_Inh_CAlternatives :: Bool,o_unbox_Inh_CAlternatives :: Bool,prefix_Inh_CAlternatives :: String,syn_Inh_CAlternatives :: Attributes,with_sig_Inh_CAlternatives :: Bool}+data Syn_CAlternatives = Syn_CAlternatives {allTpsFound_Syn_CAlternatives :: Bool,cataAlts_Syn_CAlternatives :: Decls,comments_Syn_CAlternatives :: [String],dataAlts_Syn_CAlternatives :: DataAlts,decls_Syn_CAlternatives :: Decls,errors_Syn_CAlternatives :: Seq Error,semNames_Syn_CAlternatives :: [String]}+wrap_CAlternatives (T_CAlternatives sem ) (Inh_CAlternatives _lhsIallPragmas _lhsIerrors _lhsIinh _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIwith_sig )  =+    (let ( _lhsOallTpsFound,_lhsOcataAlts,_lhsOcomments,_lhsOdataAlts,_lhsOdecls,_lhsOerrors,_lhsOsemNames) =+             (sem _lhsIallPragmas _lhsIerrors _lhsIinh _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIwith_sig )+     in  (Syn_CAlternatives _lhsOallTpsFound _lhsOcataAlts _lhsOcomments _lhsOdataAlts _lhsOdecls _lhsOerrors _lhsOsemNames ))+sem_CAlternatives_Cons :: T_CAlternative ->+                          T_CAlternatives ->+                          T_CAlternatives+sem_CAlternatives_Cons (T_CAlternative hd_ ) (T_CAlternatives tl_ )  =+    (T_CAlternatives (\ _lhsIallPragmas+                        _lhsIerrors+                        _lhsIinh+                        _lhsInt+                        _lhsIo_case+                        _lhsIo_cata+                        _lhsIo_costcentre+                        _lhsIo_data+                        _lhsIo_linePragmas+                        _lhsIo_newtypes+                        _lhsIo_pretty+                        _lhsIo_rename+                        _lhsIo_sem+                        _lhsIo_sig+                        _lhsIo_splitsems+                        _lhsIo_strictwrap+                        _lhsIo_traces+                        _lhsIo_unbox+                        _lhsIprefix+                        _lhsIsyn+                        _lhsIwith_sig ->+                          (let _lhsOdataAlts :: DataAlts+                               _lhsOcataAlts :: Decls+                               _lhsOallTpsFound :: Bool+                               _lhsOcomments :: ([String])+                               _lhsOdecls :: Decls+                               _lhsOerrors :: (Seq Error)+                               _lhsOsemNames :: ([String])+                               _hdOallPragmas :: PragmaMap+                               _hdOerrors :: (Seq Error)+                               _hdOinh :: Attributes+                               _hdOnt :: Nonterminal+                               _hdOo_case :: Bool+                               _hdOo_cata :: Bool+                               _hdOo_costcentre :: Bool+                               _hdOo_data :: (Maybe Bool)+                               _hdOo_linePragmas :: Bool+                               _hdOo_newtypes :: Bool+                               _hdOo_pretty :: Bool+                               _hdOo_rename :: Bool+                               _hdOo_sem :: Bool+                               _hdOo_sig :: Bool+                               _hdOo_splitsems :: Bool+                               _hdOo_strictwrap :: Bool+                               _hdOo_traces :: Bool+                               _hdOo_unbox :: Bool+                               _hdOprefix :: String+                               _hdOsyn :: Attributes+                               _hdOwith_sig :: Bool+                               _tlOallPragmas :: PragmaMap+                               _tlOerrors :: (Seq Error)+                               _tlOinh :: Attributes+                               _tlOnt :: Nonterminal+                               _tlOo_case :: Bool+                               _tlOo_cata :: Bool+                               _tlOo_costcentre :: Bool+                               _tlOo_data :: (Maybe Bool)+                               _tlOo_linePragmas :: Bool+                               _tlOo_newtypes :: Bool+                               _tlOo_pretty :: Bool+                               _tlOo_rename :: Bool+                               _tlOo_sem :: Bool+                               _tlOo_sig :: Bool+                               _tlOo_splitsems :: Bool+                               _tlOo_strictwrap :: Bool+                               _tlOo_traces :: Bool+                               _tlOo_unbox :: Bool+                               _tlOprefix :: String+                               _tlOsyn :: Attributes+                               _tlOwith_sig :: Bool+                               _hdIallTpsFound :: Bool+                               _hdIcataAlt :: Decl+                               _hdIcomments :: ([String])+                               _hdIdataAlt :: DataAlt+                               _hdIdecls :: Decls+                               _hdIerrors :: (Seq Error)+                               _hdIsemNames :: ([String])+                               _tlIallTpsFound :: Bool+                               _tlIcataAlts :: Decls+                               _tlIcomments :: ([String])+                               _tlIdataAlts :: DataAlts+                               _tlIdecls :: Decls+                               _tlIerrors :: (Seq Error)+                               _tlIsemNames :: ([String])+                               -- "GenerateCode.ag"(line 700, column 17)+                               _lhsOdataAlts =+                                   _hdIdataAlt : _tlIdataAlts+                               -- "GenerateCode.ag"(line 755, column 10)+                               _lhsOcataAlts =+                                   _hdIcataAlt : _tlIcataAlts+                               -- use rule "GenerateCode.ag"(line 551, column 39)+                               _lhsOallTpsFound =+                                   _hdIallTpsFound && _tlIallTpsFound+                               -- use rule "GenerateCode.ag"(line 583, column 52)+                               _lhsOcomments =+                                   _hdIcomments ++ _tlIcomments+                               -- use rule "GenerateCode.ag"(line 626, column 46)+                               _lhsOdecls =+                                   _hdIdecls ++ _tlIdecls+                               -- use rule "GenerateCode.ag"(line 564, column 32)+                               _lhsOerrors =+                                   _hdIerrors Seq.<> _tlIerrors+                               -- use rule "GenerateCode.ag"(line 774, column 63)+                               _lhsOsemNames =+                                   _hdIsemNames ++ _tlIsemNames+                               -- copy rule (down)+                               _hdOallPragmas =+                                   _lhsIallPragmas+                               -- copy rule (down)+                               _hdOerrors =+                                   _lhsIerrors+                               -- copy rule (down)+                               _hdOinh =+                                   _lhsIinh+                               -- copy rule (down)+                               _hdOnt =+                                   _lhsInt+                               -- copy rule (down)+                               _hdOo_case =+                                   _lhsIo_case+                               -- copy rule (down)+                               _hdOo_cata =+                                   _lhsIo_cata+                               -- copy rule (down)+                               _hdOo_costcentre =+                                   _lhsIo_costcentre+                               -- copy rule (down)+                               _hdOo_data =+                                   _lhsIo_data+                               -- copy rule (down)+                               _hdOo_linePragmas =+                                   _lhsIo_linePragmas+                               -- copy rule (down)+                               _hdOo_newtypes =+                                   _lhsIo_newtypes+                               -- copy rule (down)+                               _hdOo_pretty =+                                   _lhsIo_pretty+                               -- copy rule (down)+                               _hdOo_rename =+                                   _lhsIo_rename+                               -- copy rule (down)+                               _hdOo_sem =+                                   _lhsIo_sem+                               -- copy rule (down)+                               _hdOo_sig =+                                   _lhsIo_sig+                               -- copy rule (down)+                               _hdOo_splitsems =+                                   _lhsIo_splitsems+                               -- copy rule (down)+                               _hdOo_strictwrap =+                                   _lhsIo_strictwrap+                               -- copy rule (down)+                               _hdOo_traces =+                                   _lhsIo_traces+                               -- copy rule (down)+                               _hdOo_unbox =+                                   _lhsIo_unbox+                               -- copy rule (down)+                               _hdOprefix =+                                   _lhsIprefix+                               -- copy rule (down)+                               _hdOsyn =+                                   _lhsIsyn+                               -- copy rule (down)+                               _hdOwith_sig =+                                   _lhsIwith_sig+                               -- copy rule (down)+                               _tlOallPragmas =+                                   _lhsIallPragmas+                               -- copy rule (chain)+                               _tlOerrors =+                                   _hdIerrors+                               -- copy rule (down)+                               _tlOinh =+                                   _lhsIinh+                               -- copy rule (down)+                               _tlOnt =+                                   _lhsInt+                               -- copy rule (down)+                               _tlOo_case =+                                   _lhsIo_case+                               -- copy rule (down)+                               _tlOo_cata =+                                   _lhsIo_cata+                               -- copy rule (down)+                               _tlOo_costcentre =+                                   _lhsIo_costcentre+                               -- copy rule (down)+                               _tlOo_data =+                                   _lhsIo_data+                               -- copy rule (down)+                               _tlOo_linePragmas =+                                   _lhsIo_linePragmas+                               -- copy rule (down)+                               _tlOo_newtypes =+                                   _lhsIo_newtypes+                               -- copy rule (down)+                               _tlOo_pretty =+                                   _lhsIo_pretty+                               -- copy rule (down)+                               _tlOo_rename =+                                   _lhsIo_rename+                               -- copy rule (down)+                               _tlOo_sem =+                                   _lhsIo_sem+                               -- copy rule (down)+                               _tlOo_sig =+                                   _lhsIo_sig+                               -- copy rule (down)+                               _tlOo_splitsems =+                                   _lhsIo_splitsems+                               -- copy rule (down)+                               _tlOo_strictwrap =+                                   _lhsIo_strictwrap+                               -- copy rule (down)+                               _tlOo_traces =+                                   _lhsIo_traces+                               -- copy rule (down)+                               _tlOo_unbox =+                                   _lhsIo_unbox+                               -- copy rule (down)+                               _tlOprefix =+                                   _lhsIprefix+                               -- copy rule (down)+                               _tlOsyn =+                                   _lhsIsyn+                               -- copy rule (down)+                               _tlOwith_sig =+                                   _lhsIwith_sig+                               ( _hdIallTpsFound,_hdIcataAlt,_hdIcomments,_hdIdataAlt,_hdIdecls,_hdIerrors,_hdIsemNames) =+                                   (hd_ _hdOallPragmas _hdOerrors _hdOinh _hdOnt _hdOo_case _hdOo_cata _hdOo_costcentre _hdOo_data _hdOo_linePragmas _hdOo_newtypes _hdOo_pretty _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_splitsems _hdOo_strictwrap _hdOo_traces _hdOo_unbox _hdOprefix _hdOsyn _hdOwith_sig )+                               ( _tlIallTpsFound,_tlIcataAlts,_tlIcomments,_tlIdataAlts,_tlIdecls,_tlIerrors,_tlIsemNames) =+                                   (tl_ _tlOallPragmas _tlOerrors _tlOinh _tlOnt _tlOo_case _tlOo_cata _tlOo_costcentre _tlOo_data _tlOo_linePragmas _tlOo_newtypes _tlOo_pretty _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_splitsems _tlOo_strictwrap _tlOo_traces _tlOo_unbox _tlOprefix _tlOsyn _tlOwith_sig )+                           in  ( _lhsOallTpsFound,_lhsOcataAlts,_lhsOcomments,_lhsOdataAlts,_lhsOdecls,_lhsOerrors,_lhsOsemNames))) )+sem_CAlternatives_Nil :: T_CAlternatives+sem_CAlternatives_Nil  =+    (T_CAlternatives (\ _lhsIallPragmas+                        _lhsIerrors+                        _lhsIinh+                        _lhsInt+                        _lhsIo_case+                        _lhsIo_cata+                        _lhsIo_costcentre+                        _lhsIo_data+                        _lhsIo_linePragmas+                        _lhsIo_newtypes+                        _lhsIo_pretty+                        _lhsIo_rename+                        _lhsIo_sem+                        _lhsIo_sig+                        _lhsIo_splitsems+                        _lhsIo_strictwrap+                        _lhsIo_traces+                        _lhsIo_unbox+                        _lhsIprefix+                        _lhsIsyn+                        _lhsIwith_sig ->+                          (let _lhsOdataAlts :: DataAlts+                               _lhsOcataAlts :: Decls+                               _lhsOallTpsFound :: Bool+                               _lhsOcomments :: ([String])+                               _lhsOdecls :: Decls+                               _lhsOerrors :: (Seq Error)+                               _lhsOsemNames :: ([String])+                               -- "GenerateCode.ag"(line 701, column 17)+                               _lhsOdataAlts =+                                   []+                               -- "GenerateCode.ag"(line 756, column 10)+                               _lhsOcataAlts =+                                   []+                               -- use rule "GenerateCode.ag"(line 551, column 39)+                               _lhsOallTpsFound =+                                   True+                               -- use rule "GenerateCode.ag"(line 583, column 52)+                               _lhsOcomments =+                                   []+                               -- use rule "GenerateCode.ag"(line 626, column 46)+                               _lhsOdecls =+                                   []+                               -- use rule "GenerateCode.ag"(line 564, column 32)+                               _lhsOerrors =+                                   Seq.empty+                               -- use rule "GenerateCode.ag"(line 774, column 63)+                               _lhsOsemNames =+                                   []+                           in  ( _lhsOallTpsFound,_lhsOcataAlts,_lhsOcomments,_lhsOdataAlts,_lhsOdecls,_lhsOerrors,_lhsOsemNames))) )+-- CGrammar ----------------------------------------------------+{-+   visit 0:+      inherited attribute:+         options              : Options+      synthesized attributes:+         errors               : Seq Error+         output               : Program+   alternatives:+      alternative CGrammar:+         child typeSyns       : {TypeSyns}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : CProductions+         child pragmas        : {PragmaMap}+-}+-- cata+sem_CGrammar :: CGrammar ->+                T_CGrammar+sem_CGrammar (CGrammar _typeSyns _derivings _wrappers _prods _pragmas )  =+    (sem_CGrammar_CGrammar _typeSyns _derivings _wrappers (sem_CProductions _prods ) _pragmas )+-- semantic domain+newtype T_CGrammar = T_CGrammar (Options ->+                                 ( (Seq Error),Program))+data Inh_CGrammar = Inh_CGrammar {options_Inh_CGrammar :: Options}+data Syn_CGrammar = Syn_CGrammar {errors_Syn_CGrammar :: Seq Error,output_Syn_CGrammar :: Program}+wrap_CGrammar (T_CGrammar sem ) (Inh_CGrammar _lhsIoptions )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem _lhsIoptions )+     in  (Syn_CGrammar _lhsOerrors _lhsOoutput ))+sem_CGrammar_CGrammar :: TypeSyns ->+                         Derivings ->+                         (Set Nonterminal) ->+                         T_CProductions ->+                         PragmaMap ->+                         T_CGrammar+sem_CGrammar_CGrammar typeSyns_ derivings_ wrappers_ (T_CProductions prods_ ) pragmas_  =+    (T_CGrammar (\ _lhsIoptions ->+                     (let _prodsOo_sig :: Bool+                          _prodsOo_cata :: Bool+                          _prodsOo_sem :: Bool+                          _prodsOo_newtypes :: Bool+                          _prodsOo_unbox :: Bool+                          _prodsOo_case :: Bool+                          _prodsOo_pretty :: Bool+                          _prodsOo_rename :: Bool+                          _prodsOo_strictwrap :: Bool+                          _prodsOo_splitsems :: Bool+                          _prodsOo_data :: (Maybe Bool)+                          _prodsOprefix :: String+                          _prodsOo_traces :: Bool+                          _prodsOo_costcentre :: Bool+                          _prodsOo_linePragmas :: Bool+                          _prodsOallPragmas :: PragmaMap+                          _prodsOwith_sig :: Bool+                          _prodsOerrors :: (Seq Error)+                          _lhsOoutput :: Program+                          _prodsOtypeSyns :: TypeSyns+                          _prodsOderivings :: Derivings+                          _prodsOwrappers :: (Set Nonterminal)+                          _lhsOerrors :: (Seq Error)+                          _prodsIallTpsFound :: Bool+                          _prodsIchunks :: Chunks+                          _prodsIerrors :: (Seq Error)+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_sig =+                              typeSigs      _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_cata =+                              folds         _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_sem =+                              semfuns       _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_newtypes =+                              newtypes      _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_unbox =+                              unbox         _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_case =+                              cases         _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_pretty =+                              attrInfo      _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_rename =+                              rename        _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_strictwrap =+                              strictWrap    _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_splitsems =+                              splitSems     _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_data =+                              if dataTypes _lhsIoptions then Just (strictData _lhsIoptions) else Nothing+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOprefix =+                              prefix        _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_traces =+                              genTraces     _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_costcentre =+                              genCostCentres _lhsIoptions+                          -- "GenerateCode.ag"(line 43, column 17)+                          _prodsOo_linePragmas =+                              genLinePragmas _lhsIoptions+                          -- "GenerateCode.ag"(line 62, column 15)+                          _prodsOallPragmas =+                              pragmas_+                          -- "GenerateCode.ag"(line 559, column 14)+                          _prodsOwith_sig =+                              typeSigs _lhsIoptions && _prodsIallTpsFound+                          -- "GenerateCode.ag"(line 566, column 15)+                          _prodsOerrors =+                              Seq.empty+                          -- "GenerateCode.ag"(line 630, column 17)+                          _lhsOoutput =+                              Program _prodsIchunks+                          -- "GenerateCode.ag"(line 679, column 14)+                          _prodsOtypeSyns =+                              typeSyns_+                          -- "GenerateCode.ag"(line 679, column 14)+                          _prodsOderivings =+                              derivings_+                          -- "GenerateCode.ag"(line 679, column 14)+                          _prodsOwrappers =+                              wrappers_+                          -- copy rule (up)+                          _lhsOerrors =+                              _prodsIerrors+                          ( _prodsIallTpsFound,_prodsIchunks,_prodsIerrors) =+                              (prods_ _prodsOallPragmas _prodsOderivings _prodsOerrors _prodsOo_case _prodsOo_cata _prodsOo_costcentre _prodsOo_data _prodsOo_linePragmas _prodsOo_newtypes _prodsOo_pretty _prodsOo_rename _prodsOo_sem _prodsOo_sig _prodsOo_splitsems _prodsOo_strictwrap _prodsOo_traces _prodsOo_unbox _prodsOprefix _prodsOtypeSyns _prodsOwith_sig _prodsOwrappers )+                      in  ( _lhsOerrors,_lhsOoutput))) )+-- CInterface --------------------------------------------------+{-+   visit 0:+      inherited attributes:+         inh                  : Attributes+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+      synthesized attributes:+         comments             : [String]+         semDom               : [Decl]+         wrapDecls            : Decls+   alternatives:+      alternative CInterface:+         child seg            : CSegments+-}+-- cata+sem_CInterface :: CInterface ->+                  T_CInterface+sem_CInterface (CInterface _seg )  =+    (sem_CInterface_CInterface (sem_CSegments _seg ) )+-- semantic domain+newtype T_CInterface = T_CInterface (Attributes ->+                                     Nonterminal ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     (Maybe Bool) ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     String ->+                                     Attributes ->+                                     ( ([String]),([Decl]),Decls))+data Inh_CInterface = Inh_CInterface {inh_Inh_CInterface :: Attributes,nt_Inh_CInterface :: Nonterminal,o_case_Inh_CInterface :: Bool,o_cata_Inh_CInterface :: Bool,o_costcentre_Inh_CInterface :: Bool,o_data_Inh_CInterface :: Maybe Bool,o_linePragmas_Inh_CInterface :: Bool,o_newtypes_Inh_CInterface :: Bool,o_pretty_Inh_CInterface :: Bool,o_rename_Inh_CInterface :: Bool,o_sem_Inh_CInterface :: Bool,o_sig_Inh_CInterface :: Bool,o_splitsems_Inh_CInterface :: Bool,o_strictwrap_Inh_CInterface :: Bool,o_traces_Inh_CInterface :: Bool,o_unbox_Inh_CInterface :: Bool,prefix_Inh_CInterface :: String,syn_Inh_CInterface :: Attributes}+data Syn_CInterface = Syn_CInterface {comments_Syn_CInterface :: [String],semDom_Syn_CInterface :: [Decl],wrapDecls_Syn_CInterface :: Decls}+wrap_CInterface (T_CInterface sem ) (Inh_CInterface _lhsIinh _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn )  =+    (let ( _lhsOcomments,_lhsOsemDom,_lhsOwrapDecls) =+             (sem _lhsIinh _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn )+     in  (Syn_CInterface _lhsOcomments _lhsOsemDom _lhsOwrapDecls ))+sem_CInterface_CInterface :: T_CSegments ->+                             T_CInterface+sem_CInterface_CInterface (T_CSegments seg_ )  =+    (T_CInterface (\ _lhsIinh+                     _lhsInt+                     _lhsIo_case+                     _lhsIo_cata+                     _lhsIo_costcentre+                     _lhsIo_data+                     _lhsIo_linePragmas+                     _lhsIo_newtypes+                     _lhsIo_pretty+                     _lhsIo_rename+                     _lhsIo_sem+                     _lhsIo_sig+                     _lhsIo_splitsems+                     _lhsIo_strictwrap+                     _lhsIo_traces+                     _lhsIo_unbox+                     _lhsIprefix+                     _lhsIsyn ->+                       (let _segOnr :: Int+                            _lhsOsemDom :: ([Decl])+                            _lhsOcomments :: ([String])+                            _lhsOwrapDecls :: Decls+                            _segOinh :: Attributes+                            _segOnt :: Nonterminal+                            _segOo_case :: Bool+                            _segOo_cata :: Bool+                            _segOo_costcentre :: Bool+                            _segOo_data :: (Maybe Bool)+                            _segOo_linePragmas :: Bool+                            _segOo_newtypes :: Bool+                            _segOo_pretty :: Bool+                            _segOo_rename :: Bool+                            _segOo_sem :: Bool+                            _segOo_sig :: Bool+                            _segOo_splitsems :: Bool+                            _segOo_strictwrap :: Bool+                            _segOo_traces :: Bool+                            _segOo_unbox :: Bool+                            _segOprefix :: String+                            _segOsyn :: Attributes+                            _segIcomments :: ([String])+                            _segIisNil :: Bool+                            _segIsemDom :: ([Decl])+                            _segIwrapDecls :: Decls+                            -- "GenerateCode.ag"(line 163, column 17)+                            _segOnr =+                                0+                            -- "GenerateCode.ag"(line 493, column 18)+                            _lhsOsemDom =+                                Comment "semantic domain" : _segIsemDom+                            -- use rule "GenerateCode.ag"(line 583, column 52)+                            _lhsOcomments =+                                _segIcomments+                            -- use rule "GenerateCode.ag"(line 532, column 52)+                            _lhsOwrapDecls =+                                _segIwrapDecls+                            -- copy rule (down)+                            _segOinh =+                                _lhsIinh+                            -- copy rule (down)+                            _segOnt =+                                _lhsInt+                            -- copy rule (down)+                            _segOo_case =+                                _lhsIo_case+                            -- copy rule (down)+                            _segOo_cata =+                                _lhsIo_cata+                            -- copy rule (down)+                            _segOo_costcentre =+                                _lhsIo_costcentre+                            -- copy rule (down)+                            _segOo_data =+                                _lhsIo_data+                            -- copy rule (down)+                            _segOo_linePragmas =+                                _lhsIo_linePragmas+                            -- copy rule (down)+                            _segOo_newtypes =+                                _lhsIo_newtypes+                            -- copy rule (down)+                            _segOo_pretty =+                                _lhsIo_pretty+                            -- copy rule (down)+                            _segOo_rename =+                                _lhsIo_rename+                            -- copy rule (down)+                            _segOo_sem =+                                _lhsIo_sem+                            -- copy rule (down)+                            _segOo_sig =+                                _lhsIo_sig+                            -- copy rule (down)+                            _segOo_splitsems =+                                _lhsIo_splitsems+                            -- copy rule (down)+                            _segOo_strictwrap =+                                _lhsIo_strictwrap+                            -- copy rule (down)+                            _segOo_traces =+                                _lhsIo_traces+                            -- copy rule (down)+                            _segOo_unbox =+                                _lhsIo_unbox+                            -- copy rule (down)+                            _segOprefix =+                                _lhsIprefix+                            -- copy rule (down)+                            _segOsyn =+                                _lhsIsyn+                            ( _segIcomments,_segIisNil,_segIsemDom,_segIwrapDecls) =+                                (seg_ _segOinh _segOnr _segOnt _segOo_case _segOo_cata _segOo_costcentre _segOo_data _segOo_linePragmas _segOo_newtypes _segOo_pretty _segOo_rename _segOo_sem _segOo_sig _segOo_splitsems _segOo_strictwrap _segOo_traces _segOo_unbox _segOprefix _segOsyn )+                        in  ( _lhsOcomments,_lhsOsemDom,_lhsOwrapDecls))) )+-- CProduction -------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allPragmas           : PragmaMap+         derivings            : Derivings+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         typeSyns             : TypeSyns+         with_sig             : Bool+         wrappers             : Set Nonterminal+      chained attribute:+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         chunks               : Chunks+   alternatives:+      alternative CProduction:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : CAlternatives+         child inter          : CInterface+         visit 0:+            local _tup1       : {(Attributes,Attributes,Nonterminal)}+            local _tup2       : {(Attributes,Attributes,Nonterminal)}+            local semWrapper  : _+            local comment     : _+            local dataDef     : _+            local cataFun     : _+-}+-- cata+sem_CProduction :: CProduction ->+                   T_CProduction+sem_CProduction (CProduction _nt _inh _syn _alts _inter )  =+    (sem_CProduction_CProduction _nt _inh _syn (sem_CAlternatives _alts ) (sem_CInterface _inter ) )+-- semantic domain+newtype T_CProduction = T_CProduction (PragmaMap ->+                                       Derivings ->+                                       (Seq Error) ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       (Maybe Bool) ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       String ->+                                       TypeSyns ->+                                       Bool ->+                                       (Set Nonterminal) ->+                                       ( Bool,Chunks,(Seq Error)))+data Inh_CProduction = Inh_CProduction {allPragmas_Inh_CProduction :: PragmaMap,derivings_Inh_CProduction :: Derivings,errors_Inh_CProduction :: Seq Error,o_case_Inh_CProduction :: Bool,o_cata_Inh_CProduction :: Bool,o_costcentre_Inh_CProduction :: Bool,o_data_Inh_CProduction :: Maybe Bool,o_linePragmas_Inh_CProduction :: Bool,o_newtypes_Inh_CProduction :: Bool,o_pretty_Inh_CProduction :: Bool,o_rename_Inh_CProduction :: Bool,o_sem_Inh_CProduction :: Bool,o_sig_Inh_CProduction :: Bool,o_splitsems_Inh_CProduction :: Bool,o_strictwrap_Inh_CProduction :: Bool,o_traces_Inh_CProduction :: Bool,o_unbox_Inh_CProduction :: Bool,prefix_Inh_CProduction :: String,typeSyns_Inh_CProduction :: TypeSyns,with_sig_Inh_CProduction :: Bool,wrappers_Inh_CProduction :: Set Nonterminal}+data Syn_CProduction = Syn_CProduction {allTpsFound_Syn_CProduction :: Bool,chunks_Syn_CProduction :: Chunks,errors_Syn_CProduction :: Seq Error}+wrap_CProduction (T_CProduction sem ) (Inh_CProduction _lhsIallPragmas _lhsIderivings _lhsIerrors _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsItypeSyns _lhsIwith_sig _lhsIwrappers )  =+    (let ( _lhsOallTpsFound,_lhsOchunks,_lhsOerrors) =+             (sem _lhsIallPragmas _lhsIderivings _lhsIerrors _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsItypeSyns _lhsIwith_sig _lhsIwrappers )+     in  (Syn_CProduction _lhsOallTpsFound _lhsOchunks _lhsOerrors ))+sem_CProduction_CProduction :: Nonterminal ->+                               Attributes ->+                               Attributes ->+                               T_CAlternatives ->+                               T_CInterface ->+                               T_CProduction+sem_CProduction_CProduction nt_ inh_ syn_ (T_CAlternatives alts_ ) (T_CInterface inter_ )  =+    (T_CProduction (\ _lhsIallPragmas+                      _lhsIderivings+                      _lhsIerrors+                      _lhsIo_case+                      _lhsIo_cata+                      _lhsIo_costcentre+                      _lhsIo_data+                      _lhsIo_linePragmas+                      _lhsIo_newtypes+                      _lhsIo_pretty+                      _lhsIo_rename+                      _lhsIo_sem+                      _lhsIo_sig+                      _lhsIo_splitsems+                      _lhsIo_strictwrap+                      _lhsIo_traces+                      _lhsIo_unbox+                      _lhsIprefix+                      _lhsItypeSyns+                      _lhsIwith_sig+                      _lhsIwrappers ->+                        (let __tup1 :: ((Attributes,Attributes,Nonterminal))+                             _interOinh :: Attributes+                             _interOsyn :: Attributes+                             _interOnt :: Nonterminal+                             __tup2 :: ((Attributes,Attributes,Nonterminal))+                             _altsOinh :: Attributes+                             _altsOsyn :: Attributes+                             _altsOnt :: Nonterminal+                             _lhsOchunks :: Chunks+                             _lhsOallTpsFound :: Bool+                             _lhsOerrors :: (Seq Error)+                             _altsOallPragmas :: PragmaMap+                             _altsOerrors :: (Seq Error)+                             _altsOo_case :: Bool+                             _altsOo_cata :: Bool+                             _altsOo_costcentre :: Bool+                             _altsOo_data :: (Maybe Bool)+                             _altsOo_linePragmas :: Bool+                             _altsOo_newtypes :: Bool+                             _altsOo_pretty :: Bool+                             _altsOo_rename :: Bool+                             _altsOo_sem :: Bool+                             _altsOo_sig :: Bool+                             _altsOo_splitsems :: Bool+                             _altsOo_strictwrap :: Bool+                             _altsOo_traces :: Bool+                             _altsOo_unbox :: Bool+                             _altsOprefix :: String+                             _altsOwith_sig :: Bool+                             _interOo_case :: Bool+                             _interOo_cata :: Bool+                             _interOo_costcentre :: Bool+                             _interOo_data :: (Maybe Bool)+                             _interOo_linePragmas :: Bool+                             _interOo_newtypes :: Bool+                             _interOo_pretty :: Bool+                             _interOo_rename :: Bool+                             _interOo_sem :: Bool+                             _interOo_sig :: Bool+                             _interOo_splitsems :: Bool+                             _interOo_strictwrap :: Bool+                             _interOo_traces :: Bool+                             _interOo_unbox :: Bool+                             _interOprefix :: String+                             _altsIallTpsFound :: Bool+                             _altsIcataAlts :: Decls+                             _altsIcomments :: ([String])+                             _altsIdataAlts :: DataAlts+                             _altsIdecls :: Decls+                             _altsIerrors :: (Seq Error)+                             _altsIsemNames :: ([String])+                             _interIcomments :: ([String])+                             _interIsemDom :: ([Decl])+                             _interIwrapDecls :: Decls+                             -- "GenerateCode.ag"(line 72, column 25)+                             __tup1 =+                                 (inh_,syn_,nt_)+                             -- "GenerateCode.ag"(line 72, column 25)+                             (_interOinh,_,_) =+                                 __tup1+                             -- "GenerateCode.ag"(line 72, column 25)+                             (_,_interOsyn,_) =+                                 __tup1+                             -- "GenerateCode.ag"(line 72, column 25)+                             (_,_,_interOnt) =+                                 __tup1+                             -- "GenerateCode.ag"(line 73, column 24)+                             __tup2 =+                                 (inh_,syn_,nt_)+                             -- "GenerateCode.ag"(line 73, column 24)+                             (_altsOinh,_,_) =+                                 __tup2+                             -- "GenerateCode.ag"(line 73, column 24)+                             (_,_altsOsyn,_) =+                                 __tup2+                             -- "GenerateCode.ag"(line 73, column 24)+                             (_,_,_altsOnt) =+                                 __tup2+                             -- "GenerateCode.ag"(line 512, column 17)+                             _semWrapper =+                                 let inhAttrs = Map.toList inh_+                                     synAttrs = Map.toList syn_+                                     inhVars = [ SimpleExpr (attrname True _LHS a) | (a,_) <- inhAttrs ]+                                     synVars = [ SimpleExpr (attrname False _LHS a) | (a,_) <- synAttrs ]+                                     var = "sem"+                                     wrapNT = "wrap" ++ "_" ++ getName nt_+                                     inhNT = "Inh" ++ "_" ++ getName nt_+                                     synNT = "Syn" ++ "_" ++ getName nt_+                                     varPat = if  _lhsIo_newtypes+                                                  then App (sdtype nt_) [SimpleExpr var]+                                                  else SimpleExpr var+                                     typeSig = TSig wrapNT (SimpleType (sdtype nt_) `Arr` (SimpleType inhNT `Arr` SimpleType synNT))+                                     mkstrict = if _lhsIo_strictwrap then (\x -> "!(" ++ x ++ ")") else id+                                     mkdata n attrs = Data n [Record n [(getName f++"_"++n,mkstrict $ typeToString nt_ t) | (f,t) <- attrs]] False []+                                     datas = [mkdata inhNT inhAttrs, mkdata synNT synAttrs]+                                 in datas ++ [ Decl (Fun wrapNT [varPat, App inhNT inhVars])+                                                    (Let _interIwrapDecls (App synNT synVars))+                                                    Set.empty Set.empty+                                             ]+                             -- "GenerateCode.ag"(line 579, column 17)+                             _comment =+                                 Comment . unlines . map ind $ ( _interIcomments ++ ("alternatives:" : map ind _altsIcomments) )+                             -- "GenerateCode.ag"(line 633, column 18)+                             _lhsOchunks =+                                 [ Chunk (getName nt_)+                                         (Comment (getName nt_ ++ " " ++ replicate (60 - length (getName nt_)) '-'))+                                         (if _lhsIo_pretty                  then [_comment    ]   else [])+                                         (if isJust _lhsIo_data             then [_dataDef    ]   else [])+                                         (if _lhsIo_cata                    then  _cataFun        else [])+                                         (if _lhsIo_sig                     then  _interIsemDom   else [])+                                         (if nt_ `Set.member` _lhsIwrappers then  _semWrapper     else [])+                                         (if _lhsIo_sem                     then  _altsIdecls     else [])+                                         (if _lhsIo_sem                     then  _altsIsemNames  else [])+                                 ]+                             -- "GenerateCode.ag"(line 684, column 17)+                             _dataDef =+                                 let typeSyn tp = let theType =+                                                       case tp of+                                                         CommonTypes.Maybe t  -> SimpleType ("Maybe (" ++ typeToString nt_ t ++")")+                                                         CommonTypes.List t   -> Code.List $ SimpleType (typeToString nt_ t)+                                                         CommonTypes.Tuple ts -> Code.TupleType [SimpleType (typeToString nt_ t)+                                                                                                | (_,t) <- ts+                                                                                                ]+                                                  in Code.Type (getName nt_) theType+                                     derivings  = maybe [] (map getName . Set.toList) (Map.lookup nt_ _lhsIderivings)+                                     dataDef    = Data (getName nt_) _altsIdataAlts (maybe False id _lhsIo_data) derivings+                                 in maybe dataDef typeSyn $ lookup nt_ _lhsItypeSyns+                             -- "GenerateCode.ag"(line 711, column 17)+                             _cataFun =+                                 let tSig = TSig (cataname _lhsIprefix nt_)+                                                 (SimpleType (getName nt_) `Arr` SimpleType (sdtype nt_))+                                     special typ = case typ of+                                                   CommonTypes.List tp ->+                                                       let cons = SimpleExpr (semname _lhsIprefix nt_ (identifier "Cons"))+                                                           nil  = SimpleExpr (semname _lhsIprefix nt_ (identifier "Nil" ))+                                                           arg  = SimpleExpr "list"+                                                           rarg = case tp of+                                                                    NT t  -> SimpleExpr ("(Prelude.map " ++ (cataname _lhsIprefix t) ++ " list)")+                                                                    _     -> arg+                                                           lhs = Fun (cataname _lhsIprefix nt_) [arg]+                                                           rhs = (App "Prelude.foldr" [cons,nil,rarg])+                                                       in  [Decl lhs rhs Set.empty Set.empty]+                                                   CommonTypes.Maybe tp ->+                                                       let just    = semname _lhsIprefix nt_ (identifier "Just")+                                                           nothing = semname _lhsIprefix nt_ (identifier "Nothing" )+                                                           arg  = SimpleExpr "x"+                                                           rarg = case tp of+                                                                    NT t  -> App (cataname _lhsIprefix t) [arg]+                                                                    _     -> arg+                                                           lhs a = Fun (cataname _lhsIprefix nt_) [a]+                                                       in  [Decl (lhs (App "Prelude.Just" [arg]))     (App just [rarg])    Set.empty Set.empty+                                                           ,Decl (lhs (SimpleExpr "Prelude.Nothing")) (SimpleExpr nothing) Set.empty Set.empty+                                                           ]+                                                   CommonTypes.Tuple tps ->+                                                       let con  = semname _lhsIprefix nt_ (identifier "Tuple")+                                                           tps' = [ (SimpleExpr (getName x),y) | (x,y) <- tps]+                                                           rargs = map rarg tps'+                                                           rarg (n, tp) = case tp of+                                                                    NT t  -> App (cataname _lhsIprefix t) [n]+                                                                    _     -> n+                                                           lhs = Fun (cataname _lhsIprefix nt_) [TupleExpr (map fst tps')]+                                                           rhs = App con rargs+                                                       in  [Decl lhs rhs Set.empty Set.empty]+                                 in  Comment "cata" :+                                     (if _lhsIo_sig then [tSig] else []) +++                                     maybe _altsIcataAlts special (lookup nt_ _lhsItypeSyns)+                             -- use rule "GenerateCode.ag"(line 551, column 39)+                             _lhsOallTpsFound =+                                 _altsIallTpsFound+                             -- use rule "GenerateCode.ag"(line 564, column 32)+                             _lhsOerrors =+                                 _altsIerrors+                             -- copy rule (down)+                             _altsOallPragmas =+                                 _lhsIallPragmas+                             -- copy rule (down)+                             _altsOerrors =+                                 _lhsIerrors+                             -- copy rule (down)+                             _altsOo_case =+                                 _lhsIo_case+                             -- copy rule (down)+                             _altsOo_cata =+                                 _lhsIo_cata+                             -- copy rule (down)+                             _altsOo_costcentre =+                                 _lhsIo_costcentre+                             -- copy rule (down)+                             _altsOo_data =+                                 _lhsIo_data+                             -- copy rule (down)+                             _altsOo_linePragmas =+                                 _lhsIo_linePragmas+                             -- copy rule (down)+                             _altsOo_newtypes =+                                 _lhsIo_newtypes+                             -- copy rule (down)+                             _altsOo_pretty =+                                 _lhsIo_pretty+                             -- copy rule (down)+                             _altsOo_rename =+                                 _lhsIo_rename+                             -- copy rule (down)+                             _altsOo_sem =+                                 _lhsIo_sem+                             -- copy rule (down)+                             _altsOo_sig =+                                 _lhsIo_sig+                             -- copy rule (down)+                             _altsOo_splitsems =+                                 _lhsIo_splitsems+                             -- copy rule (down)+                             _altsOo_strictwrap =+                                 _lhsIo_strictwrap+                             -- copy rule (down)+                             _altsOo_traces =+                                 _lhsIo_traces+                             -- copy rule (down)+                             _altsOo_unbox =+                                 _lhsIo_unbox+                             -- copy rule (down)+                             _altsOprefix =+                                 _lhsIprefix+                             -- copy rule (down)+                             _altsOwith_sig =+                                 _lhsIwith_sig+                             -- copy rule (down)+                             _interOo_case =+                                 _lhsIo_case+                             -- copy rule (down)+                             _interOo_cata =+                                 _lhsIo_cata+                             -- copy rule (down)+                             _interOo_costcentre =+                                 _lhsIo_costcentre+                             -- copy rule (down)+                             _interOo_data =+                                 _lhsIo_data+                             -- copy rule (down)+                             _interOo_linePragmas =+                                 _lhsIo_linePragmas+                             -- copy rule (down)+                             _interOo_newtypes =+                                 _lhsIo_newtypes+                             -- copy rule (down)+                             _interOo_pretty =+                                 _lhsIo_pretty+                             -- copy rule (down)+                             _interOo_rename =+                                 _lhsIo_rename+                             -- copy rule (down)+                             _interOo_sem =+                                 _lhsIo_sem+                             -- copy rule (down)+                             _interOo_sig =+                                 _lhsIo_sig+                             -- copy rule (down)+                             _interOo_splitsems =+                                 _lhsIo_splitsems+                             -- copy rule (down)+                             _interOo_strictwrap =+                                 _lhsIo_strictwrap+                             -- copy rule (down)+                             _interOo_traces =+                                 _lhsIo_traces+                             -- copy rule (down)+                             _interOo_unbox =+                                 _lhsIo_unbox+                             -- copy rule (down)+                             _interOprefix =+                                 _lhsIprefix+                             ( _altsIallTpsFound,_altsIcataAlts,_altsIcomments,_altsIdataAlts,_altsIdecls,_altsIerrors,_altsIsemNames) =+                                 (alts_ _altsOallPragmas _altsOerrors _altsOinh _altsOnt _altsOo_case _altsOo_cata _altsOo_costcentre _altsOo_data _altsOo_linePragmas _altsOo_newtypes _altsOo_pretty _altsOo_rename _altsOo_sem _altsOo_sig _altsOo_splitsems _altsOo_strictwrap _altsOo_traces _altsOo_unbox _altsOprefix _altsOsyn _altsOwith_sig )+                             ( _interIcomments,_interIsemDom,_interIwrapDecls) =+                                 (inter_ _interOinh _interOnt _interOo_case _interOo_cata _interOo_costcentre _interOo_data _interOo_linePragmas _interOo_newtypes _interOo_pretty _interOo_rename _interOo_sem _interOo_sig _interOo_splitsems _interOo_strictwrap _interOo_traces _interOo_unbox _interOprefix _interOsyn )+                         in  ( _lhsOallTpsFound,_lhsOchunks,_lhsOerrors))) )+-- CProductions ------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allPragmas           : PragmaMap+         derivings            : Derivings+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         typeSyns             : TypeSyns+         with_sig             : Bool+         wrappers             : Set Nonterminal+      chained attribute:+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         chunks               : Chunks+   alternatives:+      alternative Cons:+         child hd             : CProduction+         child tl             : CProductions+      alternative Nil:+-}+-- cata+sem_CProductions :: CProductions ->+                    T_CProductions+sem_CProductions list  =+    (Prelude.foldr sem_CProductions_Cons sem_CProductions_Nil (Prelude.map sem_CProduction list) )+-- semantic domain+newtype T_CProductions = T_CProductions (PragmaMap ->+                                         Derivings ->+                                         (Seq Error) ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         (Maybe Bool) ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         String ->+                                         TypeSyns ->+                                         Bool ->+                                         (Set Nonterminal) ->+                                         ( Bool,Chunks,(Seq Error)))+data Inh_CProductions = Inh_CProductions {allPragmas_Inh_CProductions :: PragmaMap,derivings_Inh_CProductions :: Derivings,errors_Inh_CProductions :: Seq Error,o_case_Inh_CProductions :: Bool,o_cata_Inh_CProductions :: Bool,o_costcentre_Inh_CProductions :: Bool,o_data_Inh_CProductions :: Maybe Bool,o_linePragmas_Inh_CProductions :: Bool,o_newtypes_Inh_CProductions :: Bool,o_pretty_Inh_CProductions :: Bool,o_rename_Inh_CProductions :: Bool,o_sem_Inh_CProductions :: Bool,o_sig_Inh_CProductions :: Bool,o_splitsems_Inh_CProductions :: Bool,o_strictwrap_Inh_CProductions :: Bool,o_traces_Inh_CProductions :: Bool,o_unbox_Inh_CProductions :: Bool,prefix_Inh_CProductions :: String,typeSyns_Inh_CProductions :: TypeSyns,with_sig_Inh_CProductions :: Bool,wrappers_Inh_CProductions :: Set Nonterminal}+data Syn_CProductions = Syn_CProductions {allTpsFound_Syn_CProductions :: Bool,chunks_Syn_CProductions :: Chunks,errors_Syn_CProductions :: Seq Error}+wrap_CProductions (T_CProductions sem ) (Inh_CProductions _lhsIallPragmas _lhsIderivings _lhsIerrors _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsItypeSyns _lhsIwith_sig _lhsIwrappers )  =+    (let ( _lhsOallTpsFound,_lhsOchunks,_lhsOerrors) =+             (sem _lhsIallPragmas _lhsIderivings _lhsIerrors _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsItypeSyns _lhsIwith_sig _lhsIwrappers )+     in  (Syn_CProductions _lhsOallTpsFound _lhsOchunks _lhsOerrors ))+sem_CProductions_Cons :: T_CProduction ->+                         T_CProductions ->+                         T_CProductions+sem_CProductions_Cons (T_CProduction hd_ ) (T_CProductions tl_ )  =+    (T_CProductions (\ _lhsIallPragmas+                       _lhsIderivings+                       _lhsIerrors+                       _lhsIo_case+                       _lhsIo_cata+                       _lhsIo_costcentre+                       _lhsIo_data+                       _lhsIo_linePragmas+                       _lhsIo_newtypes+                       _lhsIo_pretty+                       _lhsIo_rename+                       _lhsIo_sem+                       _lhsIo_sig+                       _lhsIo_splitsems+                       _lhsIo_strictwrap+                       _lhsIo_traces+                       _lhsIo_unbox+                       _lhsIprefix+                       _lhsItypeSyns+                       _lhsIwith_sig+                       _lhsIwrappers ->+                         (let _lhsOallTpsFound :: Bool+                              _lhsOchunks :: Chunks+                              _lhsOerrors :: (Seq Error)+                              _hdOallPragmas :: PragmaMap+                              _hdOderivings :: Derivings+                              _hdOerrors :: (Seq Error)+                              _hdOo_case :: Bool+                              _hdOo_cata :: Bool+                              _hdOo_costcentre :: Bool+                              _hdOo_data :: (Maybe Bool)+                              _hdOo_linePragmas :: Bool+                              _hdOo_newtypes :: Bool+                              _hdOo_pretty :: Bool+                              _hdOo_rename :: Bool+                              _hdOo_sem :: Bool+                              _hdOo_sig :: Bool+                              _hdOo_splitsems :: Bool+                              _hdOo_strictwrap :: Bool+                              _hdOo_traces :: Bool+                              _hdOo_unbox :: Bool+                              _hdOprefix :: String+                              _hdOtypeSyns :: TypeSyns+                              _hdOwith_sig :: Bool+                              _hdOwrappers :: (Set Nonterminal)+                              _tlOallPragmas :: PragmaMap+                              _tlOderivings :: Derivings+                              _tlOerrors :: (Seq Error)+                              _tlOo_case :: Bool+                              _tlOo_cata :: Bool+                              _tlOo_costcentre :: Bool+                              _tlOo_data :: (Maybe Bool)+                              _tlOo_linePragmas :: Bool+                              _tlOo_newtypes :: Bool+                              _tlOo_pretty :: Bool+                              _tlOo_rename :: Bool+                              _tlOo_sem :: Bool+                              _tlOo_sig :: Bool+                              _tlOo_splitsems :: Bool+                              _tlOo_strictwrap :: Bool+                              _tlOo_traces :: Bool+                              _tlOo_unbox :: Bool+                              _tlOprefix :: String+                              _tlOtypeSyns :: TypeSyns+                              _tlOwith_sig :: Bool+                              _tlOwrappers :: (Set Nonterminal)+                              _hdIallTpsFound :: Bool+                              _hdIchunks :: Chunks+                              _hdIerrors :: (Seq Error)+                              _tlIallTpsFound :: Bool+                              _tlIchunks :: Chunks+                              _tlIerrors :: (Seq Error)+                              -- use rule "GenerateCode.ag"(line 551, column 39)+                              _lhsOallTpsFound =+                                  _hdIallTpsFound && _tlIallTpsFound+                              -- use rule "GenerateCode.ag"(line 625, column 47)+                              _lhsOchunks =+                                  _hdIchunks ++ _tlIchunks+                              -- use rule "GenerateCode.ag"(line 564, column 32)+                              _lhsOerrors =+                                  _hdIerrors Seq.<> _tlIerrors+                              -- copy rule (down)+                              _hdOallPragmas =+                                  _lhsIallPragmas+                              -- copy rule (down)+                              _hdOderivings =+                                  _lhsIderivings+                              -- copy rule (down)+                              _hdOerrors =+                                  _lhsIerrors+                              -- copy rule (down)+                              _hdOo_case =+                                  _lhsIo_case+                              -- copy rule (down)+                              _hdOo_cata =+                                  _lhsIo_cata+                              -- copy rule (down)+                              _hdOo_costcentre =+                                  _lhsIo_costcentre+                              -- copy rule (down)+                              _hdOo_data =+                                  _lhsIo_data+                              -- copy rule (down)+                              _hdOo_linePragmas =+                                  _lhsIo_linePragmas+                              -- copy rule (down)+                              _hdOo_newtypes =+                                  _lhsIo_newtypes+                              -- copy rule (down)+                              _hdOo_pretty =+                                  _lhsIo_pretty+                              -- copy rule (down)+                              _hdOo_rename =+                                  _lhsIo_rename+                              -- copy rule (down)+                              _hdOo_sem =+                                  _lhsIo_sem+                              -- copy rule (down)+                              _hdOo_sig =+                                  _lhsIo_sig+                              -- copy rule (down)+                              _hdOo_splitsems =+                                  _lhsIo_splitsems+                              -- copy rule (down)+                              _hdOo_strictwrap =+                                  _lhsIo_strictwrap+                              -- copy rule (down)+                              _hdOo_traces =+                                  _lhsIo_traces+                              -- copy rule (down)+                              _hdOo_unbox =+                                  _lhsIo_unbox+                              -- copy rule (down)+                              _hdOprefix =+                                  _lhsIprefix+                              -- copy rule (down)+                              _hdOtypeSyns =+                                  _lhsItypeSyns+                              -- copy rule (down)+                              _hdOwith_sig =+                                  _lhsIwith_sig+                              -- copy rule (down)+                              _hdOwrappers =+                                  _lhsIwrappers+                              -- copy rule (down)+                              _tlOallPragmas =+                                  _lhsIallPragmas+                              -- copy rule (down)+                              _tlOderivings =+                                  _lhsIderivings+                              -- copy rule (chain)+                              _tlOerrors =+                                  _hdIerrors+                              -- copy rule (down)+                              _tlOo_case =+                                  _lhsIo_case+                              -- copy rule (down)+                              _tlOo_cata =+                                  _lhsIo_cata+                              -- copy rule (down)+                              _tlOo_costcentre =+                                  _lhsIo_costcentre+                              -- copy rule (down)+                              _tlOo_data =+                                  _lhsIo_data+                              -- copy rule (down)+                              _tlOo_linePragmas =+                                  _lhsIo_linePragmas+                              -- copy rule (down)+                              _tlOo_newtypes =+                                  _lhsIo_newtypes+                              -- copy rule (down)+                              _tlOo_pretty =+                                  _lhsIo_pretty+                              -- copy rule (down)+                              _tlOo_rename =+                                  _lhsIo_rename+                              -- copy rule (down)+                              _tlOo_sem =+                                  _lhsIo_sem+                              -- copy rule (down)+                              _tlOo_sig =+                                  _lhsIo_sig+                              -- copy rule (down)+                              _tlOo_splitsems =+                                  _lhsIo_splitsems+                              -- copy rule (down)+                              _tlOo_strictwrap =+                                  _lhsIo_strictwrap+                              -- copy rule (down)+                              _tlOo_traces =+                                  _lhsIo_traces+                              -- copy rule (down)+                              _tlOo_unbox =+                                  _lhsIo_unbox+                              -- copy rule (down)+                              _tlOprefix =+                                  _lhsIprefix+                              -- copy rule (down)+                              _tlOtypeSyns =+                                  _lhsItypeSyns+                              -- copy rule (down)+                              _tlOwith_sig =+                                  _lhsIwith_sig+                              -- copy rule (down)+                              _tlOwrappers =+                                  _lhsIwrappers+                              ( _hdIallTpsFound,_hdIchunks,_hdIerrors) =+                                  (hd_ _hdOallPragmas _hdOderivings _hdOerrors _hdOo_case _hdOo_cata _hdOo_costcentre _hdOo_data _hdOo_linePragmas _hdOo_newtypes _hdOo_pretty _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_splitsems _hdOo_strictwrap _hdOo_traces _hdOo_unbox _hdOprefix _hdOtypeSyns _hdOwith_sig _hdOwrappers )+                              ( _tlIallTpsFound,_tlIchunks,_tlIerrors) =+                                  (tl_ _tlOallPragmas _tlOderivings _tlOerrors _tlOo_case _tlOo_cata _tlOo_costcentre _tlOo_data _tlOo_linePragmas _tlOo_newtypes _tlOo_pretty _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_splitsems _tlOo_strictwrap _tlOo_traces _tlOo_unbox _tlOprefix _tlOtypeSyns _tlOwith_sig _tlOwrappers )+                          in  ( _lhsOallTpsFound,_lhsOchunks,_lhsOerrors))) )+sem_CProductions_Nil :: T_CProductions+sem_CProductions_Nil  =+    (T_CProductions (\ _lhsIallPragmas+                       _lhsIderivings+                       _lhsIerrors+                       _lhsIo_case+                       _lhsIo_cata+                       _lhsIo_costcentre+                       _lhsIo_data+                       _lhsIo_linePragmas+                       _lhsIo_newtypes+                       _lhsIo_pretty+                       _lhsIo_rename+                       _lhsIo_sem+                       _lhsIo_sig+                       _lhsIo_splitsems+                       _lhsIo_strictwrap+                       _lhsIo_traces+                       _lhsIo_unbox+                       _lhsIprefix+                       _lhsItypeSyns+                       _lhsIwith_sig+                       _lhsIwrappers ->+                         (let _lhsOallTpsFound :: Bool+                              _lhsOchunks :: Chunks+                              _lhsOerrors :: (Seq Error)+                              -- use rule "GenerateCode.ag"(line 551, column 39)+                              _lhsOallTpsFound =+                                  True+                              -- use rule "GenerateCode.ag"(line 625, column 47)+                              _lhsOchunks =+                                  []+                              -- use rule "GenerateCode.ag"(line 564, column 32)+                              _lhsOerrors =+                                  Seq.empty+                          in  ( _lhsOallTpsFound,_lhsOchunks,_lhsOerrors))) )+-- CRule -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         children             : [(Name,Type,Bool)]+         con                  : Constructor+         higherOrderChildren  : [(Name,Type,Bool)]+         inh                  : Attributes+         instVisitNrs         : Map Identifier Int+         nr                   : Int+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+         terminals            : [Name]+         what                 : String+      chained attributes:+         declsAbove           : [Decl]+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         bldBlocksFun         : DeclBlocks -> DeclBlocks+         comments             : [String]+         decls                : Decls+         definedInsts         : [Identifier]+         exprs                : Exprs+         tSigs                : [Decl]+         tps                  : [Type]+         usedVars             : Set String+   alternatives:+      alternative CChildVisit:+         child name           : {Name}+         child nt             : {Nonterminal}+         child nr             : {Int}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child isLast         : {Bool}+         visit 0:+            local costCentreDescr : _+            local addCostCentre : _+            local decls       : _+            local isSuperfluousHigherOrderIntra : _+            local names       : _+            local mkTp        : _+            local definedTps  : _+            local nextTp      : _+      alternative CRule:+         child name           : {Name}+         child isIn           : {Bool}+         child hasCode        : {Bool}+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child childnt        : {Maybe Nonterminal}+         child tp             : {Maybe Type}+         child pattern        : Pattern+         child rhs            : {[String]}+         child defines        : {Map Int (Name,Name,Maybe Type)}+         child owrt           : {Bool}+         child origin         : {String}+         child uses           : {Set (Name, Name)}+         visit 0:+            local instTypes   : _+            local originComment : _+            local instDecls   : _+            local patDescr    : _+            local traceDescr  : _+            local addTrace    : _+            local costCentreDescr : _+            local addCostCentre : _+            local addLinePragma : _+            local decls       : _+            local definedInsts : _+            local name        : _+            local mkTp        : _+            local _tup3       : {([Type],Bool)}+-}+-- cata+sem_CRule :: CRule ->+             T_CRule+sem_CRule (CChildVisit _name _nt _nr _inh _syn _isLast )  =+    (sem_CRule_CChildVisit _name _nt _nr _inh _syn _isLast )+sem_CRule (CRule _name _isIn _hasCode _nt _con _field _childnt _tp _pattern _rhs _defines _owrt _origin _uses )  =+    (sem_CRule_CRule _name _isIn _hasCode _nt _con _field _childnt _tp (sem_Pattern _pattern ) _rhs _defines _owrt _origin _uses )+-- semantic domain+newtype T_CRule = T_CRule (([(Name,Type,Bool)]) ->+                           Constructor ->+                           ([Decl]) ->+                           (Seq Error) ->+                           ([(Name,Type,Bool)]) ->+                           Attributes ->+                           (Map Identifier Int) ->+                           Int ->+                           Nonterminal ->+                           Bool ->+                           Bool ->+                           Bool ->+                           (Maybe Bool) ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           String ->+                           Attributes ->+                           ([Name]) ->+                           String ->+                           ( Bool,(DeclBlocks -> DeclBlocks),([String]),Decls,([Decl]),([Identifier]),(Seq Error),Exprs,([Decl]),([Type]),(Set String)))+data Inh_CRule = Inh_CRule {children_Inh_CRule :: [(Name,Type,Bool)],con_Inh_CRule :: Constructor,declsAbove_Inh_CRule :: [Decl],errors_Inh_CRule :: Seq Error,higherOrderChildren_Inh_CRule :: [(Name,Type,Bool)],inh_Inh_CRule :: Attributes,instVisitNrs_Inh_CRule :: Map Identifier Int,nr_Inh_CRule :: Int,nt_Inh_CRule :: Nonterminal,o_case_Inh_CRule :: Bool,o_cata_Inh_CRule :: Bool,o_costcentre_Inh_CRule :: Bool,o_data_Inh_CRule :: Maybe Bool,o_linePragmas_Inh_CRule :: Bool,o_newtypes_Inh_CRule :: Bool,o_pretty_Inh_CRule :: Bool,o_rename_Inh_CRule :: Bool,o_sem_Inh_CRule :: Bool,o_sig_Inh_CRule :: Bool,o_splitsems_Inh_CRule :: Bool,o_strictwrap_Inh_CRule :: Bool,o_traces_Inh_CRule :: Bool,o_unbox_Inh_CRule :: Bool,prefix_Inh_CRule :: String,syn_Inh_CRule :: Attributes,terminals_Inh_CRule :: [Name],what_Inh_CRule :: String}+data Syn_CRule = Syn_CRule {allTpsFound_Syn_CRule :: Bool,bldBlocksFun_Syn_CRule :: DeclBlocks -> DeclBlocks,comments_Syn_CRule :: [String],decls_Syn_CRule :: Decls,declsAbove_Syn_CRule :: [Decl],definedInsts_Syn_CRule :: [Identifier],errors_Syn_CRule :: Seq Error,exprs_Syn_CRule :: Exprs,tSigs_Syn_CRule :: [Decl],tps_Syn_CRule :: [Type],usedVars_Syn_CRule :: Set String}+wrap_CRule (T_CRule sem ) (Inh_CRule _lhsIchildren _lhsIcon _lhsIdeclsAbove _lhsIerrors _lhsIhigherOrderChildren _lhsIinh _lhsIinstVisitNrs _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwhat )  =+    (let ( _lhsOallTpsFound,_lhsObldBlocksFun,_lhsOcomments,_lhsOdecls,_lhsOdeclsAbove,_lhsOdefinedInsts,_lhsOerrors,_lhsOexprs,_lhsOtSigs,_lhsOtps,_lhsOusedVars) =+             (sem _lhsIchildren _lhsIcon _lhsIdeclsAbove _lhsIerrors _lhsIhigherOrderChildren _lhsIinh _lhsIinstVisitNrs _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwhat )+     in  (Syn_CRule _lhsOallTpsFound _lhsObldBlocksFun _lhsOcomments _lhsOdecls _lhsOdeclsAbove _lhsOdefinedInsts _lhsOerrors _lhsOexprs _lhsOtSigs _lhsOtps _lhsOusedVars ))+sem_CRule_CChildVisit :: Name ->+                         Nonterminal ->+                         Int ->+                         Attributes ->+                         Attributes ->+                         Bool ->+                         T_CRule+sem_CRule_CChildVisit name_ nt_ nr_ inh_ syn_ isLast_  =+    (T_CRule (\ _lhsIchildren+                _lhsIcon+                _lhsIdeclsAbove+                _lhsIerrors+                _lhsIhigherOrderChildren+                _lhsIinh+                _lhsIinstVisitNrs+                _lhsInr+                _lhsInt+                _lhsIo_case+                _lhsIo_cata+                _lhsIo_costcentre+                _lhsIo_data+                _lhsIo_linePragmas+                _lhsIo_newtypes+                _lhsIo_pretty+                _lhsIo_rename+                _lhsIo_sem+                _lhsIo_sig+                _lhsIo_splitsems+                _lhsIo_strictwrap+                _lhsIo_traces+                _lhsIo_unbox+                _lhsIprefix+                _lhsIsyn+                _lhsIterminals+                _lhsIwhat ->+                  (let _lhsOexprs :: Exprs+                       _lhsOusedVars :: (Set String)+                       _lhsOtSigs :: ([Decl])+                       _lhsOtps :: ([Type])+                       _lhsOdeclsAbove :: ([Decl])+                       _lhsObldBlocksFun :: (DeclBlocks -> DeclBlocks)+                       _lhsOallTpsFound :: Bool+                       _lhsOcomments :: ([String])+                       _lhsOdecls :: Decls+                       _lhsOdefinedInsts :: ([Identifier])+                       _lhsOerrors :: (Seq Error)+                       -- "GenerateCode.ag"(line 126, column 18)+                       _costCentreDescr =+                           show _lhsInt ++ ":" ++ show _lhsIcon ++ ":" ++ show name_ ++ ":" ++ show nt_ ++ ":" ++ show nr_+                       -- "GenerateCode.ag"(line 127, column 18)+                       _addCostCentre =+                           \v -> if _lhsIo_costcentre+                                 then PragmaExpr True False ("SCC \"" ++ _costCentreDescr     ++ "\"") v+                                 else v+                       -- "GenerateCode.ag"(line 130, column 18)+                       _decls =+                           let  lhsVars =  map (attrname True name_) (Map.keys syn_)+                                           ++ if isLast_ then [] else [unwrap ++ funname name_ (nr_+1)]+                                rhsVars = map (attrname False name_) (Map.keys inh_)+                                unwrap = if _lhsIo_newtypes then typeName nt_ (nr_ + 1) ++ " " else ""+                                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 206, column 7)+                       _isSuperfluousHigherOrderIntra =+                           _lhsInr <= Map.findWithDefault (-1) name_ _lhsIinstVisitNrs+                       -- "GenerateCode.ag"(line 220, column 8)+                       _names =+                           if _isSuperfluousHigherOrderIntra+                           then []+                           else [funname name_ (nr_+1)]+                       -- "GenerateCode.ag"(line 224, column 8)+                       _lhsOexprs =+                           let wrap = if _lhsIo_newtypes then \x -> App (typeName nt_ (nr_ + 1)) [x] else id+                           in map (wrap . SimpleExpr) _names+                       -- "GenerateCode.ag"(line 232, column 7)+                       _lhsOusedVars =+                           Set.fromList _names+                       -- "GenerateCode.ag"(line 243, column 19)+                       _mkTp =+                           SimpleType . typeToString nt_+                       -- "GenerateCode.ag"(line 244, column 19)+                       _definedTps =+                           [ TSig (attrname True name_ a) (_mkTp tp) |  (a,tp) <- Map.toList syn_ ]+                       -- "GenerateCode.ag"(line 245, column 19)+                       _nextTp =+                           typeName nt_ (nr_+1)+                       -- "GenerateCode.ag"(line 246, column 19)+                       _lhsOtSigs =+                           (if isLast_ then id else (TSig (funname name_ (nr_+1)) (SimpleType _nextTp) :)) _definedTps+                       -- "GenerateCode.ag"(line 268, column 19)+                       _lhsOtps =+                           if _isSuperfluousHigherOrderIntra+                           then []+                           else [Haskell _nextTp]+                       -- "GenerateCode.ag"(line 371, column 7)+                       _lhsOdeclsAbove =+                           []+                       -- "GenerateCode.ag"(line 384, column 7)+                       _lhsObldBlocksFun =+                           DeclBlock _lhsIdeclsAbove (head _decls    )+                       -- use rule "GenerateCode.ag"(line 265, column 39)+                       _lhsOallTpsFound =+                           True+                       -- use rule "GenerateCode.ag"(line 583, column 52)+                       _lhsOcomments =+                           []+                       -- use rule "GenerateCode.ag"(line 87, column 34)+                       _lhsOdecls =+                           _decls+                       -- use rule "GenerateCode.ag"(line 140, column 55)+                       _lhsOdefinedInsts =+                           []+                       -- use rule "GenerateCode.ag"(line 564, column 32)+                       _lhsOerrors =+                           Seq.empty+                   in  ( _lhsOallTpsFound,_lhsObldBlocksFun,_lhsOcomments,_lhsOdecls,_lhsOdeclsAbove,_lhsOdefinedInsts,_lhsOerrors,_lhsOexprs,_lhsOtSigs,_lhsOtps,_lhsOusedVars))) )+sem_CRule_CRule :: Name ->+                   Bool ->+                   Bool ->+                   Nonterminal ->+                   Constructor ->+                   Name ->+                   (Maybe Nonterminal) ->+                   (Maybe Type) ->+                   T_Pattern ->+                   ([String]) ->+                   (Map Int (Name,Name,Maybe Type)) ->+                   Bool ->+                   String ->+                   (Set (Name, Name)) ->+                   T_CRule+sem_CRule_CRule name_ isIn_ hasCode_ nt_ con_ field_ childnt_ tp_ (T_Pattern pattern_ ) rhs_ defines_ owrt_ origin_ uses_  =+    (T_CRule (\ _lhsIchildren+                _lhsIcon+                _lhsIdeclsAbove+                _lhsIerrors+                _lhsIhigherOrderChildren+                _lhsIinh+                _lhsIinstVisitNrs+                _lhsInr+                _lhsInt+                _lhsIo_case+                _lhsIo_cata+                _lhsIo_costcentre+                _lhsIo_data+                _lhsIo_linePragmas+                _lhsIo_newtypes+                _lhsIo_pretty+                _lhsIo_rename+                _lhsIo_sem+                _lhsIo_sig+                _lhsIo_splitsems+                _lhsIo_strictwrap+                _lhsIo_traces+                _lhsIo_unbox+                _lhsIprefix+                _lhsIsyn+                _lhsIterminals+                _lhsIwhat ->+                  (let _lhsOexprs :: Exprs+                       _lhsOusedVars :: (Set String)+                       _lhsOtSigs :: ([Decl])+                       __tup3 :: (([Type],Bool))+                       _lhsOtps :: ([Type])+                       _lhsOallTpsFound :: Bool+                       _lhsOdeclsAbove :: ([Decl])+                       _lhsObldBlocksFun :: (DeclBlocks -> DeclBlocks)+                       _lhsOerrors :: (Seq Error)+                       _lhsOcomments :: ([String])+                       _lhsOdecls :: Decls+                       _lhsOdefinedInsts :: ([Identifier])+                       _patternIcopy :: Pattern+                       _patternIdefinedInsts :: ([Identifier])+                       _patternIpatternAttributes :: ([(Name, Name)])+                       -- "GenerateCode.ag"(line 89, column 12)+                       _instTypes =+                           map (\(n,NT t,_) -> (n,t)) _lhsIhigherOrderChildren+                       -- "GenerateCode.ag"(line 90, column 12)+                       _originComment =+                           if  _lhsIo_pretty+                               then (Comment origin_:)+                               else id+                       -- "GenerateCode.ag"(line 93, column 12)+                       _instDecls =+                           [ Decl (Pattern3 (Alias _INST' inst (Underscore (getPos inst)) []))+                                  (App (cataname _lhsIprefix (fromJust $ inst `lookup` _instTypes    ))+                                       [SimpleExpr instLocFieldName])+                                  (Set.singleton instSemFieldName)+                                  (Set.singleton instLocFieldName)+                           | inst <- _definedInsts+                           , let instLocFieldName = attrname True _INST inst+                           , let instSemFieldName = attrname False _INST' inst ]+                       -- "GenerateCode.ag"(line 101, column 12)+                       _patDescr =+                           if isIn_+                           then "_"+                           else concat $ intersperse "," (map (\(f,a) -> show f ++ "." ++ show a) _patternIpatternAttributes)+                       -- "GenerateCode.ag"(line 104, column 12)+                       _traceDescr =+                           show nt_ ++ " :: " ++ show con_ ++ " :: " ++ _patDescr+                       -- "GenerateCode.ag"(line 106, column 12)+                       _addTrace =+                           \v -> if _lhsIo_traces+                                 then Trace _traceDescr     v+                                 else v+                       -- "GenerateCode.ag"(line 109, column 12)+                       _costCentreDescr =+                           show nt_ ++ ":" ++ show con_ ++ ":" ++ _patDescr+                       -- "GenerateCode.ag"(line 110, column 12)+                       _addCostCentre =+                           \v -> if _lhsIo_costcentre+                                 then PragmaExpr True False ("SCC \"" ++ _costCentreDescr     ++ "\"") v+                                 else v+                       -- "GenerateCode.ag"(line 113, column 12)+                       _addLinePragma =+                           \v -> let p = getPos name_+                                     hasPos = line p > 0 && column p >= 0 && not (null (file p))+                                 in if _lhsIo_linePragmas && hasPos+                                    then PragmaExpr True True ("LINE " ++ show (line p) ++ " " ++ show (file p))+                                         $ LineExpr+                                         $ v+                                    else v+                       -- "GenerateCode.ag"(line 120, column 12)+                       _decls =+                           if hasCode_+                           then _originComment ( Decl (Pattern3 _patternIcopy) (_addTrace     $ _addCostCentre     $ _addLinePragma     $ (TextExpr rhs_))+                                                      (Set.fromList [attrname False fld nm | (fld,nm,_) <- Map.elems defines_])+                                                      (Set.fromList [attrname True fld nm | (fld,nm) <- Set.toList uses_])+                                               : _instDecls    )+                           else _instDecls+                       -- "GenerateCode.ag"(line 145, column 12)+                       _definedInsts =+                           if isIn_ then [] else _patternIdefinedInsts+                       -- "GenerateCode.ag"(line 215, column 12)+                       _name =+                           if  field_ == _LOC && name_ `elem` _lhsIterminals+                           then funname name_ 0+                           else attrname isIn_ field_ name_+                       -- "GenerateCode.ag"(line 218, column 12)+                       _lhsOexprs =+                           [SimpleExpr _name    ]+                       -- "GenerateCode.ag"(line 230, column 7)+                       _lhsOusedVars =+                           Set.singleton _name+                       -- "GenerateCode.ag"(line 240, column 19)+                       _mkTp =+                           SimpleType . typeToString _lhsInt+                       -- "GenerateCode.ag"(line 241, column 19)+                       _lhsOtSigs =+                           [ TSig (attrname False field attr) (_mkTp (fromJust tp))+                           |  (field,attr,tp) <- Map.elems defines_, isJust tp ]+                       -- "GenerateCode.ag"(line 267, column 23)+                       __tup3 =+                           maybe ([],False) (\tp -> ([substSelf (fromJust childnt_) tp],True)) tp_+                       -- "GenerateCode.ag"(line 267, column 23)+                       (_lhsOtps,_) =+                           __tup3+                       -- "GenerateCode.ag"(line 267, column 23)+                       (_,_lhsOallTpsFound) =+                           __tup3+                       -- "GenerateCode.ag"(line 369, column 7)+                       _lhsOdeclsAbove =+                           _lhsIdeclsAbove ++ _decls+                       -- "GenerateCode.ag"(line 382, column 7)+                       _lhsObldBlocksFun =+                           id+                       -- "GenerateCode.ag"(line 570, column 12)+                       _lhsOerrors =+                           let nameOf (Alias _ _ _ pats@(_:_)) = Ident (show (map (\(Alias _ a _ _)->a) pats)) (getPos name_)+                               nameOf _ = name_+                           in  maybe (Seq.single (MissingTypeSig _lhsInt _lhsIcon (nameOf _patternIcopy))) (const Seq.empty) tp_+                       -- "GenerateCode.ag"(line 610, 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 87, column 34)+                       _lhsOdecls =+                           _decls+                       -- use rule "GenerateCode.ag"(line 140, column 55)+                       _lhsOdefinedInsts =+                           _definedInsts+                       ( _patternIcopy,_patternIdefinedInsts,_patternIpatternAttributes) =+                           (pattern_ )+                   in  ( _lhsOallTpsFound,_lhsObldBlocksFun,_lhsOcomments,_lhsOdecls,_lhsOdeclsAbove,_lhsOdefinedInsts,_lhsOerrors,_lhsOexprs,_lhsOtSigs,_lhsOtps,_lhsOusedVars))) )+-- CSegment ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         inh                  : Attributes+         isLast               : Bool+         nr                   : Int+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+      synthesized attributes:+         comments             : [String]+         semDom               : [Decl]+         wrapDecls            : Decls+   alternatives:+      alternative CSegment:+         child inh            : {Attributes}+         child syn            : {Attributes}+-}+-- cata+sem_CSegment :: CSegment ->+                T_CSegment+sem_CSegment (CSegment _inh _syn )  =+    (sem_CSegment_CSegment _inh _syn )+-- semantic domain+newtype T_CSegment = T_CSegment (Attributes ->+                                 Bool ->+                                 Int ->+                                 Nonterminal ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 (Maybe Bool) ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 String ->+                                 Attributes ->+                                 ( ([String]),([Decl]),Decls))+data Inh_CSegment = Inh_CSegment {inh_Inh_CSegment :: Attributes,isLast_Inh_CSegment :: Bool,nr_Inh_CSegment :: Int,nt_Inh_CSegment :: Nonterminal,o_case_Inh_CSegment :: Bool,o_cata_Inh_CSegment :: Bool,o_costcentre_Inh_CSegment :: Bool,o_data_Inh_CSegment :: Maybe Bool,o_linePragmas_Inh_CSegment :: Bool,o_newtypes_Inh_CSegment :: Bool,o_pretty_Inh_CSegment :: Bool,o_rename_Inh_CSegment :: Bool,o_sem_Inh_CSegment :: Bool,o_sig_Inh_CSegment :: Bool,o_splitsems_Inh_CSegment :: Bool,o_strictwrap_Inh_CSegment :: Bool,o_traces_Inh_CSegment :: Bool,o_unbox_Inh_CSegment :: Bool,prefix_Inh_CSegment :: String,syn_Inh_CSegment :: Attributes}+data Syn_CSegment = Syn_CSegment {comments_Syn_CSegment :: [String],semDom_Syn_CSegment :: [Decl],wrapDecls_Syn_CSegment :: Decls}+wrap_CSegment (T_CSegment sem ) (Inh_CSegment _lhsIinh _lhsIisLast _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn )  =+    (let ( _lhsOcomments,_lhsOsemDom,_lhsOwrapDecls) =+             (sem _lhsIinh _lhsIisLast _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn )+     in  (Syn_CSegment _lhsOcomments _lhsOsemDom _lhsOwrapDecls ))+sem_CSegment_CSegment :: Attributes ->+                         Attributes ->+                         T_CSegment+sem_CSegment_CSegment inh_ syn_  =+    (T_CSegment (\ _lhsIinh+                   _lhsIisLast+                   _lhsInr+                   _lhsInt+                   _lhsIo_case+                   _lhsIo_cata+                   _lhsIo_costcentre+                   _lhsIo_data+                   _lhsIo_linePragmas+                   _lhsIo_newtypes+                   _lhsIo_pretty+                   _lhsIo_rename+                   _lhsIo_sem+                   _lhsIo_sig+                   _lhsIo_splitsems+                   _lhsIo_strictwrap+                   _lhsIo_traces+                   _lhsIo_unbox+                   _lhsIprefix+                   _lhsIsyn ->+                     (let _lhsOsemDom :: ([Decl])+                          _lhsOwrapDecls :: Decls+                          _lhsOcomments :: ([String])+                          -- "GenerateCode.ag"(line 496, column 15)+                          _lhsOsemDom =+                              let name = typeName _lhsInt _lhsInr+                                  tp = foldr Arr synTps inhTps+                                  inhTps = [SimpleType (typeToString _lhsInt tp) |  tp <- Map.elems inh_]+                                  synTps = mkTupleType _lhsIo_unbox (null inhTps) ([SimpleType (typeToString _lhsInt tp) |  tp <- Map.elems syn_] ++ continuation)+                                  continuation = if  _lhsIisLast+                                                     then []+                                                     else [SimpleType (typeName _lhsInt (_lhsInr + 1))]+                              in if _lhsIo_newtypes+                                 then [ Code.NewType name name tp ]+                                 else [ Code.Type name tp ]+                          -- "GenerateCode.ag"(line 534, column 15)+                          _lhsOwrapDecls =+                              let lhsVars = map (lhsname False) (Map.keys syn_)+                                            ++ if _lhsIisLast then [] else [unwrap ++ sem (_lhsInr+1)]+                                  rhsVars = map (lhsname True) (Map.keys inh_)+                                  rhs = map SimpleExpr rhsVars+                                  unwrap = if _lhsIo_newtypes then typeName _lhsInt (_lhsInr + 1) ++ " " else ""+                                  var = "sem"+                                  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 588, column 18)+                          _lhsOcomments =+                              let body = map ind (showsSegment (CSegment inh_ syn_))+                              in if null body+                                 then []+                                 else ("visit " ++ show _lhsInr ++ ":") : body+                      in  ( _lhsOcomments,_lhsOsemDom,_lhsOwrapDecls))) )+-- CSegments ---------------------------------------------------+{-+   visit 0:+      inherited attributes:+         inh                  : Attributes+         nr                   : Int+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+      synthesized attributes:+         comments             : [String]+         isNil                : Bool+         semDom               : [Decl]+         wrapDecls            : Decls+   alternatives:+      alternative Cons:+         child hd             : CSegment+         child tl             : CSegments+      alternative Nil:+-}+-- cata+sem_CSegments :: CSegments ->+                 T_CSegments+sem_CSegments list  =+    (Prelude.foldr sem_CSegments_Cons sem_CSegments_Nil (Prelude.map sem_CSegment list) )+-- semantic domain+newtype T_CSegments = T_CSegments (Attributes ->+                                   Int ->+                                   Nonterminal ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   (Maybe Bool) ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   Bool ->+                                   String ->+                                   Attributes ->+                                   ( ([String]),Bool,([Decl]),Decls))+data Inh_CSegments = Inh_CSegments {inh_Inh_CSegments :: Attributes,nr_Inh_CSegments :: Int,nt_Inh_CSegments :: Nonterminal,o_case_Inh_CSegments :: Bool,o_cata_Inh_CSegments :: Bool,o_costcentre_Inh_CSegments :: Bool,o_data_Inh_CSegments :: Maybe Bool,o_linePragmas_Inh_CSegments :: Bool,o_newtypes_Inh_CSegments :: Bool,o_pretty_Inh_CSegments :: Bool,o_rename_Inh_CSegments :: Bool,o_sem_Inh_CSegments :: Bool,o_sig_Inh_CSegments :: Bool,o_splitsems_Inh_CSegments :: Bool,o_strictwrap_Inh_CSegments :: Bool,o_traces_Inh_CSegments :: Bool,o_unbox_Inh_CSegments :: Bool,prefix_Inh_CSegments :: String,syn_Inh_CSegments :: Attributes}+data Syn_CSegments = Syn_CSegments {comments_Syn_CSegments :: [String],isNil_Syn_CSegments :: Bool,semDom_Syn_CSegments :: [Decl],wrapDecls_Syn_CSegments :: Decls}+wrap_CSegments (T_CSegments sem ) (Inh_CSegments _lhsIinh _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn )  =+    (let ( _lhsOcomments,_lhsOisNil,_lhsOsemDom,_lhsOwrapDecls) =+             (sem _lhsIinh _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn )+     in  (Syn_CSegments _lhsOcomments _lhsOisNil _lhsOsemDom _lhsOwrapDecls ))+sem_CSegments_Cons :: T_CSegment ->+                      T_CSegments ->+                      T_CSegments+sem_CSegments_Cons (T_CSegment hd_ ) (T_CSegments tl_ )  =+    (T_CSegments (\ _lhsIinh+                    _lhsInr+                    _lhsInt+                    _lhsIo_case+                    _lhsIo_cata+                    _lhsIo_costcentre+                    _lhsIo_data+                    _lhsIo_linePragmas+                    _lhsIo_newtypes+                    _lhsIo_pretty+                    _lhsIo_rename+                    _lhsIo_sem+                    _lhsIo_sig+                    _lhsIo_splitsems+                    _lhsIo_strictwrap+                    _lhsIo_traces+                    _lhsIo_unbox+                    _lhsIprefix+                    _lhsIsyn ->+                      (let _tlOnr :: Int+                           _lhsOisNil :: Bool+                           _hdOisLast :: Bool+                           _lhsOcomments :: ([String])+                           _lhsOsemDom :: ([Decl])+                           _lhsOwrapDecls :: Decls+                           _hdOinh :: Attributes+                           _hdOnr :: Int+                           _hdOnt :: Nonterminal+                           _hdOo_case :: Bool+                           _hdOo_cata :: Bool+                           _hdOo_costcentre :: Bool+                           _hdOo_data :: (Maybe Bool)+                           _hdOo_linePragmas :: Bool+                           _hdOo_newtypes :: Bool+                           _hdOo_pretty :: Bool+                           _hdOo_rename :: Bool+                           _hdOo_sem :: Bool+                           _hdOo_sig :: Bool+                           _hdOo_splitsems :: Bool+                           _hdOo_strictwrap :: Bool+                           _hdOo_traces :: Bool+                           _hdOo_unbox :: Bool+                           _hdOprefix :: String+                           _hdOsyn :: Attributes+                           _tlOinh :: Attributes+                           _tlOnt :: Nonterminal+                           _tlOo_case :: Bool+                           _tlOo_cata :: Bool+                           _tlOo_costcentre :: Bool+                           _tlOo_data :: (Maybe Bool)+                           _tlOo_linePragmas :: Bool+                           _tlOo_newtypes :: Bool+                           _tlOo_pretty :: Bool+                           _tlOo_rename :: Bool+                           _tlOo_sem :: Bool+                           _tlOo_sig :: Bool+                           _tlOo_splitsems :: Bool+                           _tlOo_strictwrap :: Bool+                           _tlOo_traces :: Bool+                           _tlOo_unbox :: Bool+                           _tlOprefix :: String+                           _tlOsyn :: Attributes+                           _hdIcomments :: ([String])+                           _hdIsemDom :: ([Decl])+                           _hdIwrapDecls :: Decls+                           _tlIcomments :: ([String])+                           _tlIisNil :: Bool+                           _tlIsemDom :: ([Decl])+                           _tlIwrapDecls :: Decls+                           -- "GenerateCode.ag"(line 165, column 11)+                           _tlOnr =+                               _lhsInr + 1+                           -- "GenerateCode.ag"(line 178, column 12)+                           _lhsOisNil =+                               False+                           -- "GenerateCode.ag"(line 179, column 12)+                           _hdOisLast =+                               _tlIisNil+                           -- use rule "GenerateCode.ag"(line 583, column 52)+                           _lhsOcomments =+                               _hdIcomments ++ _tlIcomments+                           -- use rule "GenerateCode.ag"(line 491, column 50)+                           _lhsOsemDom =+                               _hdIsemDom ++ _tlIsemDom+                           -- use rule "GenerateCode.ag"(line 532, column 52)+                           _lhsOwrapDecls =+                               _hdIwrapDecls ++ _tlIwrapDecls+                           -- copy rule (down)+                           _hdOinh =+                               _lhsIinh+                           -- copy rule (down)+                           _hdOnr =+                               _lhsInr+                           -- copy rule (down)+                           _hdOnt =+                               _lhsInt+                           -- copy rule (down)+                           _hdOo_case =+                               _lhsIo_case+                           -- copy rule (down)+                           _hdOo_cata =+                               _lhsIo_cata+                           -- copy rule (down)+                           _hdOo_costcentre =+                               _lhsIo_costcentre+                           -- copy rule (down)+                           _hdOo_data =+                               _lhsIo_data+                           -- copy rule (down)+                           _hdOo_linePragmas =+                               _lhsIo_linePragmas+                           -- copy rule (down)+                           _hdOo_newtypes =+                               _lhsIo_newtypes+                           -- copy rule (down)+                           _hdOo_pretty =+                               _lhsIo_pretty+                           -- copy rule (down)+                           _hdOo_rename =+                               _lhsIo_rename+                           -- copy rule (down)+                           _hdOo_sem =+                               _lhsIo_sem+                           -- copy rule (down)+                           _hdOo_sig =+                               _lhsIo_sig+                           -- copy rule (down)+                           _hdOo_splitsems =+                               _lhsIo_splitsems+                           -- copy rule (down)+                           _hdOo_strictwrap =+                               _lhsIo_strictwrap+                           -- copy rule (down)+                           _hdOo_traces =+                               _lhsIo_traces+                           -- copy rule (down)+                           _hdOo_unbox =+                               _lhsIo_unbox+                           -- copy rule (down)+                           _hdOprefix =+                               _lhsIprefix+                           -- copy rule (down)+                           _hdOsyn =+                               _lhsIsyn+                           -- copy rule (down)+                           _tlOinh =+                               _lhsIinh+                           -- copy rule (down)+                           _tlOnt =+                               _lhsInt+                           -- copy rule (down)+                           _tlOo_case =+                               _lhsIo_case+                           -- copy rule (down)+                           _tlOo_cata =+                               _lhsIo_cata+                           -- copy rule (down)+                           _tlOo_costcentre =+                               _lhsIo_costcentre+                           -- copy rule (down)+                           _tlOo_data =+                               _lhsIo_data+                           -- copy rule (down)+                           _tlOo_linePragmas =+                               _lhsIo_linePragmas+                           -- copy rule (down)+                           _tlOo_newtypes =+                               _lhsIo_newtypes+                           -- copy rule (down)+                           _tlOo_pretty =+                               _lhsIo_pretty+                           -- copy rule (down)+                           _tlOo_rename =+                               _lhsIo_rename+                           -- copy rule (down)+                           _tlOo_sem =+                               _lhsIo_sem+                           -- copy rule (down)+                           _tlOo_sig =+                               _lhsIo_sig+                           -- copy rule (down)+                           _tlOo_splitsems =+                               _lhsIo_splitsems+                           -- copy rule (down)+                           _tlOo_strictwrap =+                               _lhsIo_strictwrap+                           -- copy rule (down)+                           _tlOo_traces =+                               _lhsIo_traces+                           -- copy rule (down)+                           _tlOo_unbox =+                               _lhsIo_unbox+                           -- copy rule (down)+                           _tlOprefix =+                               _lhsIprefix+                           -- copy rule (down)+                           _tlOsyn =+                               _lhsIsyn+                           ( _hdIcomments,_hdIsemDom,_hdIwrapDecls) =+                               (hd_ _hdOinh _hdOisLast _hdOnr _hdOnt _hdOo_case _hdOo_cata _hdOo_costcentre _hdOo_data _hdOo_linePragmas _hdOo_newtypes _hdOo_pretty _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_splitsems _hdOo_strictwrap _hdOo_traces _hdOo_unbox _hdOprefix _hdOsyn )+                           ( _tlIcomments,_tlIisNil,_tlIsemDom,_tlIwrapDecls) =+                               (tl_ _tlOinh _tlOnr _tlOnt _tlOo_case _tlOo_cata _tlOo_costcentre _tlOo_data _tlOo_linePragmas _tlOo_newtypes _tlOo_pretty _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_splitsems _tlOo_strictwrap _tlOo_traces _tlOo_unbox _tlOprefix _tlOsyn )+                       in  ( _lhsOcomments,_lhsOisNil,_lhsOsemDom,_lhsOwrapDecls))) )+sem_CSegments_Nil :: T_CSegments+sem_CSegments_Nil  =+    (T_CSegments (\ _lhsIinh+                    _lhsInr+                    _lhsInt+                    _lhsIo_case+                    _lhsIo_cata+                    _lhsIo_costcentre+                    _lhsIo_data+                    _lhsIo_linePragmas+                    _lhsIo_newtypes+                    _lhsIo_pretty+                    _lhsIo_rename+                    _lhsIo_sem+                    _lhsIo_sig+                    _lhsIo_splitsems+                    _lhsIo_strictwrap+                    _lhsIo_traces+                    _lhsIo_unbox+                    _lhsIprefix+                    _lhsIsyn ->+                      (let _lhsOisNil :: Bool+                           _lhsOcomments :: ([String])+                           _lhsOsemDom :: ([Decl])+                           _lhsOwrapDecls :: Decls+                           -- "GenerateCode.ag"(line 180, column 10)+                           _lhsOisNil =+                               True+                           -- use rule "GenerateCode.ag"(line 583, column 52)+                           _lhsOcomments =+                               []+                           -- use rule "GenerateCode.ag"(line 491, column 50)+                           _lhsOsemDom =+                               []+                           -- use rule "GenerateCode.ag"(line 532, column 52)+                           _lhsOwrapDecls =+                               []+                       in  ( _lhsOcomments,_lhsOisNil,_lhsOsemDom,_lhsOwrapDecls))) )+-- CVisit ------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allPragmas           : PragmaMap+         children             : [(Name,Type,Bool)]+         con                  : Constructor+         inh                  : Attributes+         instVisitNrs         : Map Identifier Int+         isLast               : Bool+         nextIntra            : Exprs+         nextIntraVars        : Set String+         nr                   : Int+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+         terminals            : [Name]+         with_sig             : Bool+      chained attribute:+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         comments             : [String]+         decls                : Decls+         gatherInstVisitNrs   : Map Identifier Int+         intra                : Exprs+         intraVars            : Set String+         semNames             : [String]+   alternatives:+      alternative CVisit:+         child inh            : {Attributes}+         child syn            : {Attributes}+         child vss            : Sequence+         child intra          : Sequence+         child ordered        : {Bool}+         visit 0:+            local _tup4       : _+            local higherOrderChildren : _+            local firstOrderChildren : _+            local funcname    : _+            local nextVisitName : _+            local nextVisitDecl : _+            local decls       : _+            local lastExprVars : _+            local _tup5       : _+            local blockFunDecls : _+            local blockFirstFunCall : _+            local costCentreDescr : _+            local addCostCentre : _+            local semFun      : _+            local tsig        : _+            local semType     : _+            local typeSigs    : _+            local o_case      : _+            local o_splitsems : _+-}+-- cata+sem_CVisit :: CVisit ->+              T_CVisit+sem_CVisit (CVisit _inh _syn _vss _intra _ordered )  =+    (sem_CVisit_CVisit _inh _syn (sem_Sequence _vss ) (sem_Sequence _intra ) _ordered )+-- semantic domain+newtype T_CVisit = T_CVisit (PragmaMap ->+                             ([(Name,Type,Bool)]) ->+                             Constructor ->+                             (Seq Error) ->+                             Attributes ->+                             (Map Identifier Int) ->+                             Bool ->+                             Exprs ->+                             (Set String) ->+                             Int ->+                             Nonterminal ->+                             Bool ->+                             Bool ->+                             Bool ->+                             (Maybe Bool) ->+                             Bool ->+                             Bool ->+                             Bool ->+                             Bool ->+                             Bool ->+                             Bool ->+                             Bool ->+                             Bool ->+                             Bool ->+                             Bool ->+                             String ->+                             Attributes ->+                             ([Name]) ->+                             Bool ->+                             ( Bool,([String]),Decls,(Seq Error),(Map Identifier Int),Exprs,(Set String),([String])))+data Inh_CVisit = Inh_CVisit {allPragmas_Inh_CVisit :: PragmaMap,children_Inh_CVisit :: [(Name,Type,Bool)],con_Inh_CVisit :: Constructor,errors_Inh_CVisit :: Seq Error,inh_Inh_CVisit :: Attributes,instVisitNrs_Inh_CVisit :: Map Identifier Int,isLast_Inh_CVisit :: Bool,nextIntra_Inh_CVisit :: Exprs,nextIntraVars_Inh_CVisit :: Set String,nr_Inh_CVisit :: Int,nt_Inh_CVisit :: Nonterminal,o_case_Inh_CVisit :: Bool,o_cata_Inh_CVisit :: Bool,o_costcentre_Inh_CVisit :: Bool,o_data_Inh_CVisit :: Maybe Bool,o_linePragmas_Inh_CVisit :: Bool,o_newtypes_Inh_CVisit :: Bool,o_pretty_Inh_CVisit :: Bool,o_rename_Inh_CVisit :: Bool,o_sem_Inh_CVisit :: Bool,o_sig_Inh_CVisit :: Bool,o_splitsems_Inh_CVisit :: Bool,o_strictwrap_Inh_CVisit :: Bool,o_traces_Inh_CVisit :: Bool,o_unbox_Inh_CVisit :: Bool,prefix_Inh_CVisit :: String,syn_Inh_CVisit :: Attributes,terminals_Inh_CVisit :: [Name],with_sig_Inh_CVisit :: Bool}+data Syn_CVisit = Syn_CVisit {allTpsFound_Syn_CVisit :: Bool,comments_Syn_CVisit :: [String],decls_Syn_CVisit :: Decls,errors_Syn_CVisit :: Seq Error,gatherInstVisitNrs_Syn_CVisit :: Map Identifier Int,intra_Syn_CVisit :: Exprs,intraVars_Syn_CVisit :: Set String,semNames_Syn_CVisit :: [String]}+wrap_CVisit (T_CVisit sem ) (Inh_CVisit _lhsIallPragmas _lhsIchildren _lhsIcon _lhsIerrors _lhsIinh _lhsIinstVisitNrs _lhsIisLast _lhsInextIntra _lhsInextIntraVars _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwith_sig )  =+    (let ( _lhsOallTpsFound,_lhsOcomments,_lhsOdecls,_lhsOerrors,_lhsOgatherInstVisitNrs,_lhsOintra,_lhsOintraVars,_lhsOsemNames) =+             (sem _lhsIallPragmas _lhsIchildren _lhsIcon _lhsIerrors _lhsIinh _lhsIinstVisitNrs _lhsIisLast _lhsInextIntra _lhsInextIntraVars _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwith_sig )+     in  (Syn_CVisit _lhsOallTpsFound _lhsOcomments _lhsOdecls _lhsOerrors _lhsOgatherInstVisitNrs _lhsOintra _lhsOintraVars _lhsOsemNames ))+sem_CVisit_CVisit :: Attributes ->+                     Attributes ->+                     T_Sequence ->+                     T_Sequence ->+                     Bool ->+                     T_CVisit+sem_CVisit_CVisit inh_ syn_ (T_Sequence vss_ ) (T_Sequence intra_ ) ordered_  =+    (T_CVisit (\ _lhsIallPragmas+                 _lhsIchildren+                 _lhsIcon+                 _lhsIerrors+                 _lhsIinh+                 _lhsIinstVisitNrs+                 _lhsIisLast+                 _lhsInextIntra+                 _lhsInextIntraVars+                 _lhsInr+                 _lhsInt+                 _lhsIo_case+                 _lhsIo_cata+                 _lhsIo_costcentre+                 _lhsIo_data+                 _lhsIo_linePragmas+                 _lhsIo_newtypes+                 _lhsIo_pretty+                 _lhsIo_rename+                 _lhsIo_sem+                 _lhsIo_sig+                 _lhsIo_splitsems+                 _lhsIo_strictwrap+                 _lhsIo_traces+                 _lhsIo_unbox+                 _lhsIprefix+                 _lhsIsyn+                 _lhsIterminals+                 _lhsIwith_sig ->+                   (let _lhsOintra :: Exprs+                        _lhsOintraVars :: (Set String)+                        _vssOlastExpr :: Expr+                        _intraOlastExpr :: Expr+                        _lhsOdecls :: Decls+                        _lhsOgatherInstVisitNrs :: (Map Identifier Int)+                        _vssOdeclsAbove :: ([Decl])+                        _intraOdeclsAbove :: ([Decl])+                        _lhsOallTpsFound :: Bool+                        _lhsOerrors :: (Seq Error)+                        _lhsOcomments :: ([String])+                        _vssOwhat :: String+                        _intraOwhat :: String+                        _lhsOsemNames :: ([String])+                        _vssOchildren :: ([(Name,Type,Bool)])+                        _vssOcon :: Constructor+                        _vssOerrors :: (Seq Error)+                        _vssOhigherOrderChildren :: ([(Name,Type,Bool)])+                        _vssOinh :: Attributes+                        _vssOinstVisitNrs :: (Map Identifier Int)+                        _vssOnr :: Int+                        _vssOnt :: Nonterminal+                        _vssOo_case :: Bool+                        _vssOo_cata :: Bool+                        _vssOo_costcentre :: Bool+                        _vssOo_data :: (Maybe Bool)+                        _vssOo_linePragmas :: Bool+                        _vssOo_newtypes :: Bool+                        _vssOo_pretty :: Bool+                        _vssOo_rename :: Bool+                        _vssOo_sem :: Bool+                        _vssOo_sig :: Bool+                        _vssOo_splitsems :: Bool+                        _vssOo_strictwrap :: Bool+                        _vssOo_traces :: Bool+                        _vssOo_unbox :: Bool+                        _vssOprefix :: String+                        _vssOsyn :: Attributes+                        _vssOterminals :: ([Name])+                        _intraOchildren :: ([(Name,Type,Bool)])+                        _intraOcon :: Constructor+                        _intraOerrors :: (Seq Error)+                        _intraOhigherOrderChildren :: ([(Name,Type,Bool)])+                        _intraOinh :: Attributes+                        _intraOinstVisitNrs :: (Map Identifier Int)+                        _intraOnr :: Int+                        _intraOnt :: Nonterminal+                        _intraOo_case :: Bool+                        _intraOo_cata :: Bool+                        _intraOo_costcentre :: Bool+                        _intraOo_data :: (Maybe Bool)+                        _intraOo_linePragmas :: Bool+                        _intraOo_newtypes :: Bool+                        _intraOo_pretty :: Bool+                        _intraOo_rename :: Bool+                        _intraOo_sem :: Bool+                        _intraOo_sig :: Bool+                        _intraOo_splitsems :: Bool+                        _intraOo_strictwrap :: Bool+                        _intraOo_traces :: Bool+                        _intraOo_unbox :: Bool+                        _intraOprefix :: String+                        _intraOsyn :: Attributes+                        _intraOterminals :: ([Name])+                        _vssIallTpsFound :: Bool+                        _vssIblockDecls :: DeclBlocks+                        _vssIcomments :: ([String])+                        _vssIdecls :: Decls+                        _vssIdeclsAbove :: ([Decl])+                        _vssIdefinedInsts :: ([Identifier])+                        _vssIerrors :: (Seq Error)+                        _vssIexprs :: Exprs+                        _vssItSigs :: ([Decl])+                        _vssItps :: ([Type])+                        _vssIusedVars :: (Set String)+                        _intraIallTpsFound :: Bool+                        _intraIblockDecls :: DeclBlocks+                        _intraIcomments :: ([String])+                        _intraIdecls :: Decls+                        _intraIdeclsAbove :: ([Decl])+                        _intraIdefinedInsts :: ([Identifier])+                        _intraIerrors :: (Seq Error)+                        _intraIexprs :: Exprs+                        _intraItSigs :: ([Decl])+                        _intraItps :: ([Type])+                        _intraIusedVars :: (Set String)+                        -- "GenerateCode.ag"(line 189, column 13)+                        _lhsOintra =+                            _intraIexprs+                        -- "GenerateCode.ag"(line 190, column 13)+                        _lhsOintraVars =+                            _intraIusedVars+                        -- "GenerateCode.ag"(line 278, column 13)+                        __tup4 =+                            partition (\(_,_,ho) -> ho) _lhsIchildren+                        -- "GenerateCode.ag"(line 278, column 13)+                        (_higherOrderChildren,_) =+                            __tup4+                        -- "GenerateCode.ag"(line 278, column 13)+                        (_,_firstOrderChildren) =+                            __tup4+                        -- "GenerateCode.ag"(line 279, column 13)+                        _funcname =+                            seqSemname _lhsIprefix _lhsInt _lhsIcon _lhsInr+                        -- "GenerateCode.ag"(line 280, column 13)+                        _nextVisitName =+                            if _lhsIisLast then [] else [visitname _lhsIprefix _lhsInt (_lhsInr+1)]+                        -- "GenerateCode.ag"(line 281, column 13)+                        _nextVisitDecl =+                            let  lhs = TupleLhs _nextVisitName+                                 rhs = App fun _lhsInextIntra+                                 fun = seqSemname _lhsIprefix _lhsInt _lhsIcon (_lhsInr+1)+                            in if _lhsIisLast+                               then []+                               else [Decl lhs rhs (Set.fromList _nextVisitName) _lhsInextIntraVars]+                        -- "GenerateCode.ag"(line 287, column 13)+                        _decls =+                            _typeSigs ++ _vssIdecls ++ _nextVisitDecl+                        -- "GenerateCode.ag"(line 288, column 13)+                        _vssOlastExpr =+                            mkTupleExpr _lhsIo_unbox (null $ Map.keys inh_) $ map (SimpleExpr . lhsname False) (Map.keys syn_) ++ map SimpleExpr _nextVisitName+                        -- "GenerateCode.ag"(line 289, column 13)+                        _intraOlastExpr =+                            error "lastExpr: not used here"+                        -- "GenerateCode.ag"(line 290, column 13)+                        _lastExprVars =+                            map (lhsname False) (Map.keys syn_) ++ _nextVisitName+                        -- "GenerateCode.ag"(line 291, column 13)+                        __tup5 =+                            mkPartitionedFunction _funcname     _o_case     _nextVisitDecl     _lastExprVars     _vssIblockDecls+                        -- "GenerateCode.ag"(line 291, column 13)+                        (_blockFunDecls,_) =+                            __tup5+                        -- "GenerateCode.ag"(line 291, column 13)+                        (_,_blockFirstFunCall) =+                            __tup5+                        -- "GenerateCode.ag"(line 293, column 13)+                        _costCentreDescr =+                            "b" ++ ":" ++ show _lhsInt ++ ":" ++ show _lhsIcon ++ ":" ++ show _lhsInr+                        -- "GenerateCode.ag"(line 294, column 13)+                        _addCostCentre =+                            \v -> if _lhsIo_costcentre+                                  then PragmaExpr True False ("SCC \"" ++ _costCentreDescr     ++ "\"") v+                                  else v+                        -- "GenerateCode.ag"(line 298, column 13)+                        _semFun =+                            let  lhs = Fun _funcname lhs_args+                                 lhs_args = if _lhsInr == 0 then map field _firstOrderChildren     else _intraIexprs+                                 field (name,NT tp,_) = let unwrap | _lhsIo_newtypes = \x -> App (sdtype tp) [x]+                                                                   | otherwise       = id+                                                         in unwrap (SimpleExpr (funname name 0))+                                 field (name,_,_)     =  SimpleExpr (funname name 0)+                                 rhs = wrap+                                     . mkLambda (map (lhsname True) (Map.keys inh_))+                                     $ _addCostCentre+                                     $ if ordered_ && _o_splitsems+                                       then _blockFirstFunCall+                                       else mkLet _o_case _decls+                                            . mkTupleExpr _lhsIo_unbox (null $ Map.keys inh_)+                                            $ map (SimpleExpr . lhsname False) (Map.keys syn_) ++ map SimpleExpr _nextVisitName+                                 wrap = if  _lhsIo_newtypes+                                            then \x -> App (typeName _lhsInt _lhsInr) [x]+                                            else id+                            in Decl lhs rhs Set.empty Set.empty+                        -- "GenerateCode.ag"(line 319, column 13)+                        _tsig =+                            TSig _funcname _semType+                        -- "GenerateCode.ag"(line 320, column 13)+                        _semType =+                            let argType (NT tp)      rec | tp /= _SELF = SimpleType (sdtype tp) `Arr` rec+                                                         | tp == _SELF = error "GenerateCode: found an intra-type with type SELF, which should have been prevented by CRule.tps"+                                argType (Haskell tp) rec               = SimpleType tp          `Arr` rec+                            in if  _lhsInr == 0+                                   then foldr argType (SimpleType (sdtype   _lhsInt        )) (map (\(_,t,_) -> t) _firstOrderChildren    )+                                   else foldr argType (SimpleType (typeName _lhsInt _lhsInr)) _intraItps+                        -- "GenerateCode.ag"(line 326, column 13)+                        _lhsOdecls =+                            ( if  _lhsIwith_sig+                              then [_tsig, _semFun]+                              else [_semFun]+                            ) +++                            ( if ordered_ && _o_splitsems+                              then _blockFunDecls+                              else []+                            )+                        -- "GenerateCode.ag"(line 334, column 13)+                        _typeSigs =+                            if  _lhsIo_sig && not _o_case+                                then  _vssItSigs+                                else  []+                        -- "GenerateCode.ag"(line 337, column 13)+                        _o_case =+                            _lhsIo_case && ordered_ && not (hasPragma _lhsIallPragmas _lhsInt _lhsIcon _NOCASE)+                        -- "GenerateCode.ag"(line 338, column 13)+                        _o_splitsems =+                            ordered_ && _lhsIo_splitsems+                        -- "GenerateCode.ag"(line 353, column 7)+                        _lhsOgatherInstVisitNrs =+                            Map.fromList [(i,_lhsInr) | i <- _vssIdefinedInsts]+                        -- "GenerateCode.ag"(line 364, column 7)+                        _vssOdeclsAbove =+                            []+                        -- "GenerateCode.ag"(line 365, column 7)+                        _intraOdeclsAbove =+                            error "declsAbove: not used here"+                        -- "GenerateCode.ag"(line 557, column 13)+                        _lhsOallTpsFound =+                            _intraIallTpsFound+                        -- "GenerateCode.ag"(line 568, column 13)+                        _lhsOerrors =+                            _intraIerrors+                        -- "GenerateCode.ag"(line 601, column 18)+                        _lhsOcomments =+                            let body = map ind (_vssIcomments ++ _intraIcomments)+                            in if null body+                               then []+                               else ("visit " ++ show _lhsInr ++ ":") : body+                        -- "GenerateCode.ag"(line 605, column 18)+                        _vssOwhat =+                            "local"+                        -- "GenerateCode.ag"(line 606, column 18)+                        _intraOwhat =+                            "intra"+                        -- "GenerateCode.ag"(line 784, column 7)+                        _lhsOsemNames =+                            [_funcname    ]+                        -- copy rule (down)+                        _vssOchildren =+                            _lhsIchildren+                        -- copy rule (down)+                        _vssOcon =+                            _lhsIcon+                        -- copy rule (down)+                        _vssOerrors =+                            _lhsIerrors+                        -- copy rule (from local)+                        _vssOhigherOrderChildren =+                            _higherOrderChildren+                        -- copy rule (down)+                        _vssOinh =+                            _lhsIinh+                        -- copy rule (down)+                        _vssOinstVisitNrs =+                            _lhsIinstVisitNrs+                        -- copy rule (down)+                        _vssOnr =+                            _lhsInr+                        -- copy rule (down)+                        _vssOnt =+                            _lhsInt+                        -- copy rule (from local)+                        _vssOo_case =+                            _o_case+                        -- copy rule (down)+                        _vssOo_cata =+                            _lhsIo_cata+                        -- copy rule (down)+                        _vssOo_costcentre =+                            _lhsIo_costcentre+                        -- copy rule (down)+                        _vssOo_data =+                            _lhsIo_data+                        -- copy rule (down)+                        _vssOo_linePragmas =+                            _lhsIo_linePragmas+                        -- copy rule (down)+                        _vssOo_newtypes =+                            _lhsIo_newtypes+                        -- copy rule (down)+                        _vssOo_pretty =+                            _lhsIo_pretty+                        -- copy rule (down)+                        _vssOo_rename =+                            _lhsIo_rename+                        -- copy rule (down)+                        _vssOo_sem =+                            _lhsIo_sem+                        -- copy rule (down)+                        _vssOo_sig =+                            _lhsIo_sig+                        -- copy rule (from local)+                        _vssOo_splitsems =+                            _o_splitsems+                        -- copy rule (down)+                        _vssOo_strictwrap =+                            _lhsIo_strictwrap+                        -- copy rule (down)+                        _vssOo_traces =+                            _lhsIo_traces+                        -- copy rule (down)+                        _vssOo_unbox =+                            _lhsIo_unbox+                        -- copy rule (down)+                        _vssOprefix =+                            _lhsIprefix+                        -- copy rule (down)+                        _vssOsyn =+                            _lhsIsyn+                        -- copy rule (down)+                        _vssOterminals =+                            _lhsIterminals+                        -- copy rule (down)+                        _intraOchildren =+                            _lhsIchildren+                        -- copy rule (down)+                        _intraOcon =+                            _lhsIcon+                        -- copy rule (chain)+                        _intraOerrors =+                            _vssIerrors+                        -- copy rule (from local)+                        _intraOhigherOrderChildren =+                            _higherOrderChildren+                        -- copy rule (down)+                        _intraOinh =+                            _lhsIinh+                        -- copy rule (down)+                        _intraOinstVisitNrs =+                            _lhsIinstVisitNrs+                        -- copy rule (down)+                        _intraOnr =+                            _lhsInr+                        -- copy rule (down)+                        _intraOnt =+                            _lhsInt+                        -- copy rule (from local)+                        _intraOo_case =+                            _o_case+                        -- copy rule (down)+                        _intraOo_cata =+                            _lhsIo_cata+                        -- copy rule (down)+                        _intraOo_costcentre =+                            _lhsIo_costcentre+                        -- copy rule (down)+                        _intraOo_data =+                            _lhsIo_data+                        -- copy rule (down)+                        _intraOo_linePragmas =+                            _lhsIo_linePragmas+                        -- copy rule (down)+                        _intraOo_newtypes =+                            _lhsIo_newtypes+                        -- copy rule (down)+                        _intraOo_pretty =+                            _lhsIo_pretty+                        -- copy rule (down)+                        _intraOo_rename =+                            _lhsIo_rename+                        -- copy rule (down)+                        _intraOo_sem =+                            _lhsIo_sem+                        -- copy rule (down)+                        _intraOo_sig =+                            _lhsIo_sig+                        -- copy rule (from local)+                        _intraOo_splitsems =+                            _o_splitsems+                        -- copy rule (down)+                        _intraOo_strictwrap =+                            _lhsIo_strictwrap+                        -- copy rule (down)+                        _intraOo_traces =+                            _lhsIo_traces+                        -- copy rule (down)+                        _intraOo_unbox =+                            _lhsIo_unbox+                        -- copy rule (down)+                        _intraOprefix =+                            _lhsIprefix+                        -- copy rule (down)+                        _intraOsyn =+                            _lhsIsyn+                        -- copy rule (down)+                        _intraOterminals =+                            _lhsIterminals+                        ( _vssIallTpsFound,_vssIblockDecls,_vssIcomments,_vssIdecls,_vssIdeclsAbove,_vssIdefinedInsts,_vssIerrors,_vssIexprs,_vssItSigs,_vssItps,_vssIusedVars) =+                            (vss_ _vssOchildren _vssOcon _vssOdeclsAbove _vssOerrors _vssOhigherOrderChildren _vssOinh _vssOinstVisitNrs _vssOlastExpr _vssOnr _vssOnt _vssOo_case _vssOo_cata _vssOo_costcentre _vssOo_data _vssOo_linePragmas _vssOo_newtypes _vssOo_pretty _vssOo_rename _vssOo_sem _vssOo_sig _vssOo_splitsems _vssOo_strictwrap _vssOo_traces _vssOo_unbox _vssOprefix _vssOsyn _vssOterminals _vssOwhat )+                        ( _intraIallTpsFound,_intraIblockDecls,_intraIcomments,_intraIdecls,_intraIdeclsAbove,_intraIdefinedInsts,_intraIerrors,_intraIexprs,_intraItSigs,_intraItps,_intraIusedVars) =+                            (intra_ _intraOchildren _intraOcon _intraOdeclsAbove _intraOerrors _intraOhigherOrderChildren _intraOinh _intraOinstVisitNrs _intraOlastExpr _intraOnr _intraOnt _intraOo_case _intraOo_cata _intraOo_costcentre _intraOo_data _intraOo_linePragmas _intraOo_newtypes _intraOo_pretty _intraOo_rename _intraOo_sem _intraOo_sig _intraOo_splitsems _intraOo_strictwrap _intraOo_traces _intraOo_unbox _intraOprefix _intraOsyn _intraOterminals _intraOwhat )+                    in  ( _lhsOallTpsFound,_lhsOcomments,_lhsOdecls,_lhsOerrors,_lhsOgatherInstVisitNrs,_lhsOintra,_lhsOintraVars,_lhsOsemNames))) )+-- CVisits -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allPragmas           : PragmaMap+         children             : [(Name,Type,Bool)]+         con                  : Constructor+         inh                  : Attributes+         instVisitNrs         : Map Identifier Int+         nr                   : Int+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+         terminals            : [Name]+         with_sig             : Bool+      chained attribute:+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         comments             : [String]+         decls                : Decls+         gatherInstVisitNrs   : Map Identifier Int+         intra                : Exprs+         intraVars            : Set String+         isNil                : Bool+         semNames             : [String]+   alternatives:+      alternative Cons:+         child hd             : CVisit+         child tl             : CVisits+      alternative Nil:+-}+-- cata+sem_CVisits :: CVisits ->+               T_CVisits+sem_CVisits list  =+    (Prelude.foldr sem_CVisits_Cons sem_CVisits_Nil (Prelude.map sem_CVisit list) )+-- semantic domain+newtype T_CVisits = T_CVisits (PragmaMap ->+                               ([(Name,Type,Bool)]) ->+                               Constructor ->+                               (Seq Error) ->+                               Attributes ->+                               (Map Identifier Int) ->+                               Int ->+                               Nonterminal ->+                               Bool ->+                               Bool ->+                               Bool ->+                               (Maybe Bool) ->+                               Bool ->+                               Bool ->+                               Bool ->+                               Bool ->+                               Bool ->+                               Bool ->+                               Bool ->+                               Bool ->+                               Bool ->+                               Bool ->+                               String ->+                               Attributes ->+                               ([Name]) ->+                               Bool ->+                               ( Bool,([String]),Decls,(Seq Error),(Map Identifier Int),Exprs,(Set String),Bool,([String])))+data Inh_CVisits = Inh_CVisits {allPragmas_Inh_CVisits :: PragmaMap,children_Inh_CVisits :: [(Name,Type,Bool)],con_Inh_CVisits :: Constructor,errors_Inh_CVisits :: Seq Error,inh_Inh_CVisits :: Attributes,instVisitNrs_Inh_CVisits :: Map Identifier Int,nr_Inh_CVisits :: Int,nt_Inh_CVisits :: Nonterminal,o_case_Inh_CVisits :: Bool,o_cata_Inh_CVisits :: Bool,o_costcentre_Inh_CVisits :: Bool,o_data_Inh_CVisits :: Maybe Bool,o_linePragmas_Inh_CVisits :: Bool,o_newtypes_Inh_CVisits :: Bool,o_pretty_Inh_CVisits :: Bool,o_rename_Inh_CVisits :: Bool,o_sem_Inh_CVisits :: Bool,o_sig_Inh_CVisits :: Bool,o_splitsems_Inh_CVisits :: Bool,o_strictwrap_Inh_CVisits :: Bool,o_traces_Inh_CVisits :: Bool,o_unbox_Inh_CVisits :: Bool,prefix_Inh_CVisits :: String,syn_Inh_CVisits :: Attributes,terminals_Inh_CVisits :: [Name],with_sig_Inh_CVisits :: Bool}+data Syn_CVisits = Syn_CVisits {allTpsFound_Syn_CVisits :: Bool,comments_Syn_CVisits :: [String],decls_Syn_CVisits :: Decls,errors_Syn_CVisits :: Seq Error,gatherInstVisitNrs_Syn_CVisits :: Map Identifier Int,intra_Syn_CVisits :: Exprs,intraVars_Syn_CVisits :: Set String,isNil_Syn_CVisits :: Bool,semNames_Syn_CVisits :: [String]}+wrap_CVisits (T_CVisits sem ) (Inh_CVisits _lhsIallPragmas _lhsIchildren _lhsIcon _lhsIerrors _lhsIinh _lhsIinstVisitNrs _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwith_sig )  =+    (let ( _lhsOallTpsFound,_lhsOcomments,_lhsOdecls,_lhsOerrors,_lhsOgatherInstVisitNrs,_lhsOintra,_lhsOintraVars,_lhsOisNil,_lhsOsemNames) =+             (sem _lhsIallPragmas _lhsIchildren _lhsIcon _lhsIerrors _lhsIinh _lhsIinstVisitNrs _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwith_sig )+     in  (Syn_CVisits _lhsOallTpsFound _lhsOcomments _lhsOdecls _lhsOerrors _lhsOgatherInstVisitNrs _lhsOintra _lhsOintraVars _lhsOisNil _lhsOsemNames ))+sem_CVisits_Cons :: T_CVisit ->+                    T_CVisits ->+                    T_CVisits+sem_CVisits_Cons (T_CVisit hd_ ) (T_CVisits tl_ )  =+    (T_CVisits (\ _lhsIallPragmas+                  _lhsIchildren+                  _lhsIcon+                  _lhsIerrors+                  _lhsIinh+                  _lhsIinstVisitNrs+                  _lhsInr+                  _lhsInt+                  _lhsIo_case+                  _lhsIo_cata+                  _lhsIo_costcentre+                  _lhsIo_data+                  _lhsIo_linePragmas+                  _lhsIo_newtypes+                  _lhsIo_pretty+                  _lhsIo_rename+                  _lhsIo_sem+                  _lhsIo_sig+                  _lhsIo_splitsems+                  _lhsIo_strictwrap+                  _lhsIo_traces+                  _lhsIo_unbox+                  _lhsIprefix+                  _lhsIsyn+                  _lhsIterminals+                  _lhsIwith_sig ->+                    (let _tlOnr :: Int+                         _lhsOisNil :: Bool+                         _hdOisLast :: Bool+                         _hdOnextIntra :: Exprs+                         _hdOnextIntraVars :: (Set String)+                         _lhsOintra :: Exprs+                         _lhsOintraVars :: (Set String)+                         _lhsOallTpsFound :: Bool+                         _lhsOcomments :: ([String])+                         _lhsOdecls :: Decls+                         _lhsOerrors :: (Seq Error)+                         _lhsOgatherInstVisitNrs :: (Map Identifier Int)+                         _lhsOsemNames :: ([String])+                         _hdOallPragmas :: PragmaMap+                         _hdOchildren :: ([(Name,Type,Bool)])+                         _hdOcon :: Constructor+                         _hdOerrors :: (Seq Error)+                         _hdOinh :: Attributes+                         _hdOinstVisitNrs :: (Map Identifier Int)+                         _hdOnr :: Int+                         _hdOnt :: Nonterminal+                         _hdOo_case :: Bool+                         _hdOo_cata :: Bool+                         _hdOo_costcentre :: Bool+                         _hdOo_data :: (Maybe Bool)+                         _hdOo_linePragmas :: Bool+                         _hdOo_newtypes :: Bool+                         _hdOo_pretty :: Bool+                         _hdOo_rename :: Bool+                         _hdOo_sem :: Bool+                         _hdOo_sig :: Bool+                         _hdOo_splitsems :: Bool+                         _hdOo_strictwrap :: Bool+                         _hdOo_traces :: Bool+                         _hdOo_unbox :: Bool+                         _hdOprefix :: String+                         _hdOsyn :: Attributes+                         _hdOterminals :: ([Name])+                         _hdOwith_sig :: Bool+                         _tlOallPragmas :: PragmaMap+                         _tlOchildren :: ([(Name,Type,Bool)])+                         _tlOcon :: Constructor+                         _tlOerrors :: (Seq Error)+                         _tlOinh :: Attributes+                         _tlOinstVisitNrs :: (Map Identifier Int)+                         _tlOnt :: Nonterminal+                         _tlOo_case :: Bool+                         _tlOo_cata :: Bool+                         _tlOo_costcentre :: Bool+                         _tlOo_data :: (Maybe Bool)+                         _tlOo_linePragmas :: Bool+                         _tlOo_newtypes :: Bool+                         _tlOo_pretty :: Bool+                         _tlOo_rename :: Bool+                         _tlOo_sem :: Bool+                         _tlOo_sig :: Bool+                         _tlOo_splitsems :: Bool+                         _tlOo_strictwrap :: Bool+                         _tlOo_traces :: Bool+                         _tlOo_unbox :: Bool+                         _tlOprefix :: String+                         _tlOsyn :: Attributes+                         _tlOterminals :: ([Name])+                         _tlOwith_sig :: Bool+                         _hdIallTpsFound :: Bool+                         _hdIcomments :: ([String])+                         _hdIdecls :: Decls+                         _hdIerrors :: (Seq Error)+                         _hdIgatherInstVisitNrs :: (Map Identifier Int)+                         _hdIintra :: Exprs+                         _hdIintraVars :: (Set String)+                         _hdIsemNames :: ([String])+                         _tlIallTpsFound :: Bool+                         _tlIcomments :: ([String])+                         _tlIdecls :: Decls+                         _tlIerrors :: (Seq Error)+                         _tlIgatherInstVisitNrs :: (Map Identifier Int)+                         _tlIintra :: Exprs+                         _tlIintraVars :: (Set String)+                         _tlIisNil :: Bool+                         _tlIsemNames :: ([String])+                         -- "GenerateCode.ag"(line 161, column 11)+                         _tlOnr =+                             _lhsInr + 1+                         -- "GenerateCode.ag"(line 174, column 12)+                         _lhsOisNil =+                             False+                         -- "GenerateCode.ag"(line 175, column 12)+                         _hdOisLast =+                             _tlIisNil+                         -- "GenerateCode.ag"(line 192, column 12)+                         _hdOnextIntra =+                             _tlIintra+                         -- "GenerateCode.ag"(line 193, column 12)+                         _hdOnextIntraVars =+                             _tlIintraVars+                         -- "GenerateCode.ag"(line 194, column 12)+                         _lhsOintra =+                             _hdIintra+                         -- "GenerateCode.ag"(line 195, column 12)+                         _lhsOintraVars =+                             _hdIintraVars+                         -- use rule "GenerateCode.ag"(line 551, column 39)+                         _lhsOallTpsFound =+                             _hdIallTpsFound && _tlIallTpsFound+                         -- use rule "GenerateCode.ag"(line 583, column 52)+                         _lhsOcomments =+                             _hdIcomments ++ _tlIcomments+                         -- use rule "GenerateCode.ag"(line 276, column 33)+                         _lhsOdecls =+                             _hdIdecls ++ _tlIdecls+                         -- use rule "GenerateCode.ag"(line 564, column 32)+                         _lhsOerrors =+                             _hdIerrors Seq.<> _tlIerrors+                         -- use rule "GenerateCode.ag"(line 346, column 44)+                         _lhsOgatherInstVisitNrs =+                             _hdIgatherInstVisitNrs `Map.union` _tlIgatherInstVisitNrs+                         -- use rule "GenerateCode.ag"(line 774, column 63)+                         _lhsOsemNames =+                             _hdIsemNames ++ _tlIsemNames+                         -- copy rule (down)+                         _hdOallPragmas =+                             _lhsIallPragmas+                         -- copy rule (down)+                         _hdOchildren =+                             _lhsIchildren+                         -- copy rule (down)+                         _hdOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _hdOerrors =+                             _lhsIerrors+                         -- copy rule (down)+                         _hdOinh =+                             _lhsIinh+                         -- copy rule (down)+                         _hdOinstVisitNrs =+                             _lhsIinstVisitNrs+                         -- copy rule (down)+                         _hdOnr =+                             _lhsInr+                         -- copy rule (down)+                         _hdOnt =+                             _lhsInt+                         -- copy rule (down)+                         _hdOo_case =+                             _lhsIo_case+                         -- copy rule (down)+                         _hdOo_cata =+                             _lhsIo_cata+                         -- copy rule (down)+                         _hdOo_costcentre =+                             _lhsIo_costcentre+                         -- copy rule (down)+                         _hdOo_data =+                             _lhsIo_data+                         -- copy rule (down)+                         _hdOo_linePragmas =+                             _lhsIo_linePragmas+                         -- copy rule (down)+                         _hdOo_newtypes =+                             _lhsIo_newtypes+                         -- copy rule (down)+                         _hdOo_pretty =+                             _lhsIo_pretty+                         -- copy rule (down)+                         _hdOo_rename =+                             _lhsIo_rename+                         -- copy rule (down)+                         _hdOo_sem =+                             _lhsIo_sem+                         -- copy rule (down)+                         _hdOo_sig =+                             _lhsIo_sig+                         -- copy rule (down)+                         _hdOo_splitsems =+                             _lhsIo_splitsems+                         -- copy rule (down)+                         _hdOo_strictwrap =+                             _lhsIo_strictwrap+                         -- copy rule (down)+                         _hdOo_traces =+                             _lhsIo_traces+                         -- copy rule (down)+                         _hdOo_unbox =+                             _lhsIo_unbox+                         -- copy rule (down)+                         _hdOprefix =+                             _lhsIprefix+                         -- copy rule (down)+                         _hdOsyn =+                             _lhsIsyn+                         -- copy rule (down)+                         _hdOterminals =+                             _lhsIterminals+                         -- copy rule (down)+                         _hdOwith_sig =+                             _lhsIwith_sig+                         -- copy rule (down)+                         _tlOallPragmas =+                             _lhsIallPragmas+                         -- copy rule (down)+                         _tlOchildren =+                             _lhsIchildren+                         -- copy rule (down)+                         _tlOcon =+                             _lhsIcon+                         -- copy rule (chain)+                         _tlOerrors =+                             _hdIerrors+                         -- copy rule (down)+                         _tlOinh =+                             _lhsIinh+                         -- copy rule (down)+                         _tlOinstVisitNrs =+                             _lhsIinstVisitNrs+                         -- copy rule (down)+                         _tlOnt =+                             _lhsInt+                         -- copy rule (down)+                         _tlOo_case =+                             _lhsIo_case+                         -- copy rule (down)+                         _tlOo_cata =+                             _lhsIo_cata+                         -- copy rule (down)+                         _tlOo_costcentre =+                             _lhsIo_costcentre+                         -- copy rule (down)+                         _tlOo_data =+                             _lhsIo_data+                         -- copy rule (down)+                         _tlOo_linePragmas =+                             _lhsIo_linePragmas+                         -- copy rule (down)+                         _tlOo_newtypes =+                             _lhsIo_newtypes+                         -- copy rule (down)+                         _tlOo_pretty =+                             _lhsIo_pretty+                         -- copy rule (down)+                         _tlOo_rename =+                             _lhsIo_rename+                         -- copy rule (down)+                         _tlOo_sem =+                             _lhsIo_sem+                         -- copy rule (down)+                         _tlOo_sig =+                             _lhsIo_sig+                         -- copy rule (down)+                         _tlOo_splitsems =+                             _lhsIo_splitsems+                         -- copy rule (down)+                         _tlOo_strictwrap =+                             _lhsIo_strictwrap+                         -- copy rule (down)+                         _tlOo_traces =+                             _lhsIo_traces+                         -- copy rule (down)+                         _tlOo_unbox =+                             _lhsIo_unbox+                         -- copy rule (down)+                         _tlOprefix =+                             _lhsIprefix+                         -- copy rule (down)+                         _tlOsyn =+                             _lhsIsyn+                         -- copy rule (down)+                         _tlOterminals =+                             _lhsIterminals+                         -- copy rule (down)+                         _tlOwith_sig =+                             _lhsIwith_sig+                         ( _hdIallTpsFound,_hdIcomments,_hdIdecls,_hdIerrors,_hdIgatherInstVisitNrs,_hdIintra,_hdIintraVars,_hdIsemNames) =+                             (hd_ _hdOallPragmas _hdOchildren _hdOcon _hdOerrors _hdOinh _hdOinstVisitNrs _hdOisLast _hdOnextIntra _hdOnextIntraVars _hdOnr _hdOnt _hdOo_case _hdOo_cata _hdOo_costcentre _hdOo_data _hdOo_linePragmas _hdOo_newtypes _hdOo_pretty _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_splitsems _hdOo_strictwrap _hdOo_traces _hdOo_unbox _hdOprefix _hdOsyn _hdOterminals _hdOwith_sig )+                         ( _tlIallTpsFound,_tlIcomments,_tlIdecls,_tlIerrors,_tlIgatherInstVisitNrs,_tlIintra,_tlIintraVars,_tlIisNil,_tlIsemNames) =+                             (tl_ _tlOallPragmas _tlOchildren _tlOcon _tlOerrors _tlOinh _tlOinstVisitNrs _tlOnr _tlOnt _tlOo_case _tlOo_cata _tlOo_costcentre _tlOo_data _tlOo_linePragmas _tlOo_newtypes _tlOo_pretty _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_splitsems _tlOo_strictwrap _tlOo_traces _tlOo_unbox _tlOprefix _tlOsyn _tlOterminals _tlOwith_sig )+                     in  ( _lhsOallTpsFound,_lhsOcomments,_lhsOdecls,_lhsOerrors,_lhsOgatherInstVisitNrs,_lhsOintra,_lhsOintraVars,_lhsOisNil,_lhsOsemNames))) )+sem_CVisits_Nil :: T_CVisits+sem_CVisits_Nil  =+    (T_CVisits (\ _lhsIallPragmas+                  _lhsIchildren+                  _lhsIcon+                  _lhsIerrors+                  _lhsIinh+                  _lhsIinstVisitNrs+                  _lhsInr+                  _lhsInt+                  _lhsIo_case+                  _lhsIo_cata+                  _lhsIo_costcentre+                  _lhsIo_data+                  _lhsIo_linePragmas+                  _lhsIo_newtypes+                  _lhsIo_pretty+                  _lhsIo_rename+                  _lhsIo_sem+                  _lhsIo_sig+                  _lhsIo_splitsems+                  _lhsIo_strictwrap+                  _lhsIo_traces+                  _lhsIo_unbox+                  _lhsIprefix+                  _lhsIsyn+                  _lhsIterminals+                  _lhsIwith_sig ->+                    (let _lhsOisNil :: Bool+                         _lhsOintra :: Exprs+                         _lhsOintraVars :: (Set String)+                         _lhsOallTpsFound :: Bool+                         _lhsOcomments :: ([String])+                         _lhsOdecls :: Decls+                         _lhsOerrors :: (Seq Error)+                         _lhsOgatherInstVisitNrs :: (Map Identifier Int)+                         _lhsOsemNames :: ([String])+                         -- "GenerateCode.ag"(line 176, column 10)+                         _lhsOisNil =+                             True+                         -- "GenerateCode.ag"(line 196, column 10)+                         _lhsOintra =+                             []+                         -- "GenerateCode.ag"(line 197, column 10)+                         _lhsOintraVars =+                             Set.empty+                         -- use rule "GenerateCode.ag"(line 551, column 39)+                         _lhsOallTpsFound =+                             True+                         -- use rule "GenerateCode.ag"(line 583, column 52)+                         _lhsOcomments =+                             []+                         -- use rule "GenerateCode.ag"(line 276, column 33)+                         _lhsOdecls =+                             []+                         -- use rule "GenerateCode.ag"(line 564, column 32)+                         _lhsOerrors =+                             Seq.empty+                         -- use rule "GenerateCode.ag"(line 346, column 44)+                         _lhsOgatherInstVisitNrs =+                             Map.empty+                         -- use rule "GenerateCode.ag"(line 774, column 63)+                         _lhsOsemNames =+                             []+                     in  ( _lhsOallTpsFound,_lhsOcomments,_lhsOdecls,_lhsOerrors,_lhsOgatherInstVisitNrs,_lhsOintra,_lhsOintraVars,_lhsOisNil,_lhsOsemNames))) )+-- DeclBlocks --------------------------------------------------+{-+   visit 0:+      inherited attributes:+         blockNr              : Int+         lastExprVars         : [String]+         nextVisitDecls       : [Decl]+         optCase              : Bool+         prefix               : String+      synthesized attributes:+         callExpr             : Expr+         decls                : [Decl]+         freeVars             : [String]+   alternatives:+      alternative DeclBlock:+         child defs           : {[Decl]}+         child visit          : {Decl}+         child next           : DeclBlocks+         visit 0:+            local lambdaName  : _+            local pragmaDecl  : _+            local freeVars    : _+            local decl        : _+      alternative DeclTerminator:+         child defs           : {[Decl]}+         child result         : {Expr}+         visit 0:+            local lambdaName  : _+            local pragmaDecl  : _+            local freeVars    : _+-}+-- cata+sem_DeclBlocks :: DeclBlocks ->+                  T_DeclBlocks+sem_DeclBlocks (DeclBlock _defs _visit _next )  =+    (sem_DeclBlocks_DeclBlock _defs _visit (sem_DeclBlocks _next ) )+sem_DeclBlocks (DeclTerminator _defs _result )  =+    (sem_DeclBlocks_DeclTerminator _defs _result )+-- semantic domain+newtype T_DeclBlocks = T_DeclBlocks (Int ->+                                     ([String]) ->+                                     ([Decl]) ->+                                     Bool ->+                                     String ->+                                     ( Expr,([Decl]),([String])))+data Inh_DeclBlocks = Inh_DeclBlocks {blockNr_Inh_DeclBlocks :: Int,lastExprVars_Inh_DeclBlocks :: [String],nextVisitDecls_Inh_DeclBlocks :: [Decl],optCase_Inh_DeclBlocks :: Bool,prefix_Inh_DeclBlocks :: String}+data Syn_DeclBlocks = Syn_DeclBlocks {callExpr_Syn_DeclBlocks :: Expr,decls_Syn_DeclBlocks :: [Decl],freeVars_Syn_DeclBlocks :: [String]}+wrap_DeclBlocks (T_DeclBlocks sem ) (Inh_DeclBlocks _lhsIblockNr _lhsIlastExprVars _lhsInextVisitDecls _lhsIoptCase _lhsIprefix )  =+    (let ( _lhsOcallExpr,_lhsOdecls,_lhsOfreeVars) =+             (sem _lhsIblockNr _lhsIlastExprVars _lhsInextVisitDecls _lhsIoptCase _lhsIprefix )+     in  (Syn_DeclBlocks _lhsOcallExpr _lhsOdecls _lhsOfreeVars ))+sem_DeclBlocks_DeclBlock :: ([Decl]) ->+                            Decl ->+                            T_DeclBlocks ->+                            T_DeclBlocks+sem_DeclBlocks_DeclBlock defs_ visit_ (T_DeclBlocks next_ )  =+    (T_DeclBlocks (\ _lhsIblockNr+                     _lhsIlastExprVars+                     _lhsInextVisitDecls+                     _lhsIoptCase+                     _lhsIprefix ->+                       (let _nextOblockNr :: Int+                            _lhsOcallExpr :: Expr+                            _lhsOdecls :: ([Decl])+                            _lhsOfreeVars :: ([String])+                            _nextOlastExprVars :: ([String])+                            _nextOnextVisitDecls :: ([Decl])+                            _nextOoptCase :: Bool+                            _nextOprefix :: String+                            _nextIcallExpr :: Expr+                            _nextIdecls :: ([Decl])+                            _nextIfreeVars :: ([String])+                            -- "GenerateCode.ag"(line 443, column 7)+                            _nextOblockNr =+                                _lhsIblockNr + 1+                            -- "GenerateCode.ag"(line 448, column 7)+                            _lambdaName =+                                _lhsIprefix ++ "_block" ++ show _lhsIblockNr+                            -- "GenerateCode.ag"(line 449, column 7)+                            _pragmaDecl =+                                PragmaDecl ("NOINLINE " ++ _lambdaName    )+                            -- "GenerateCode.ag"(line 450, column 7)+                            _lhsOcallExpr =+                                App _lambdaName     (map SimpleExpr _freeVars    )+                            -- "GenerateCode.ag"(line 454, column 7)+                            _freeVars =+                                freevars _nextIfreeVars (visit_ : defs_)+                            -- "GenerateCode.ag"(line 461, column 7)+                            _decl =+                                mkBlockLambda _lhsIoptCase _lambdaName     _freeVars     (defs_ ++ [visit_]) _nextIcallExpr+                            -- "GenerateCode.ag"(line 462, column 7)+                            _lhsOdecls =+                                (if _lhsIblockNr > 1 then [_pragmaDecl    ] else []) ++ [_decl    ] ++ _nextIdecls+                            -- copy rule (from local)+                            _lhsOfreeVars =+                                _freeVars+                            -- copy rule (down)+                            _nextOlastExprVars =+                                _lhsIlastExprVars+                            -- copy rule (down)+                            _nextOnextVisitDecls =+                                _lhsInextVisitDecls+                            -- copy rule (down)+                            _nextOoptCase =+                                _lhsIoptCase+                            -- copy rule (down)+                            _nextOprefix =+                                _lhsIprefix+                            ( _nextIcallExpr,_nextIdecls,_nextIfreeVars) =+                                (next_ _nextOblockNr _nextOlastExprVars _nextOnextVisitDecls _nextOoptCase _nextOprefix )+                        in  ( _lhsOcallExpr,_lhsOdecls,_lhsOfreeVars))) )+sem_DeclBlocks_DeclTerminator :: ([Decl]) ->+                                 Expr ->+                                 T_DeclBlocks+sem_DeclBlocks_DeclTerminator defs_ result_  =+    (T_DeclBlocks (\ _lhsIblockNr+                     _lhsIlastExprVars+                     _lhsInextVisitDecls+                     _lhsIoptCase+                     _lhsIprefix ->+                       (let _lhsOcallExpr :: Expr+                            _lhsOdecls :: ([Decl])+                            _lhsOfreeVars :: ([String])+                            -- "GenerateCode.ag"(line 448, column 7)+                            _lambdaName =+                                _lhsIprefix ++ "_block" ++ show _lhsIblockNr+                            -- "GenerateCode.ag"(line 449, column 7)+                            _pragmaDecl =+                                PragmaDecl ("NOINLINE " ++ _lambdaName    )+                            -- "GenerateCode.ag"(line 450, column 7)+                            _lhsOcallExpr =+                                App _lambdaName     (map SimpleExpr _freeVars    )+                            -- "GenerateCode.ag"(line 452, column 7)+                            _freeVars =+                                freevars _lhsIlastExprVars (defs_ ++ _lhsInextVisitDecls)+                            -- "GenerateCode.ag"(line 459, column 7)+                            _lhsOdecls =+                                [ mkBlockLambda _lhsIoptCase _lambdaName     _freeVars     (defs_ ++ _lhsInextVisitDecls) result_ ]+                            -- copy rule (from local)+                            _lhsOfreeVars =+                                _freeVars+                        in  ( _lhsOcallExpr,_lhsOdecls,_lhsOfreeVars))) )+-- DeclBlocksRoot ----------------------------------------------+{-+   visit 0:+      inherited attributes:+         lastExprVars         : [String]+         nextVisitDecls       : [Decl]+         optCase              : Bool+         prefix               : String+      synthesized attributes:+         firstCall            : Expr+         lambdas              : [Decl]+   alternatives:+      alternative DeclBlocksRoot:+         child blocks         : DeclBlocks+-}+-- cata+sem_DeclBlocksRoot :: DeclBlocksRoot ->+                      T_DeclBlocksRoot+sem_DeclBlocksRoot (DeclBlocksRoot _blocks )  =+    (sem_DeclBlocksRoot_DeclBlocksRoot (sem_DeclBlocks _blocks ) )+-- semantic domain+newtype T_DeclBlocksRoot = T_DeclBlocksRoot (([String]) ->+                                             ([Decl]) ->+                                             Bool ->+                                             String ->+                                             ( Expr,([Decl])))+data Inh_DeclBlocksRoot = Inh_DeclBlocksRoot {lastExprVars_Inh_DeclBlocksRoot :: [String],nextVisitDecls_Inh_DeclBlocksRoot :: [Decl],optCase_Inh_DeclBlocksRoot :: Bool,prefix_Inh_DeclBlocksRoot :: String}+data Syn_DeclBlocksRoot = Syn_DeclBlocksRoot {firstCall_Syn_DeclBlocksRoot :: Expr,lambdas_Syn_DeclBlocksRoot :: [Decl]}+wrap_DeclBlocksRoot (T_DeclBlocksRoot sem ) (Inh_DeclBlocksRoot _lhsIlastExprVars _lhsInextVisitDecls _lhsIoptCase _lhsIprefix )  =+    (let ( _lhsOfirstCall,_lhsOlambdas) =+             (sem _lhsIlastExprVars _lhsInextVisitDecls _lhsIoptCase _lhsIprefix )+     in  (Syn_DeclBlocksRoot _lhsOfirstCall _lhsOlambdas ))+sem_DeclBlocksRoot_DeclBlocksRoot :: T_DeclBlocks ->+                                     T_DeclBlocksRoot+sem_DeclBlocksRoot_DeclBlocksRoot (T_DeclBlocks blocks_ )  =+    (T_DeclBlocksRoot (\ _lhsIlastExprVars+                         _lhsInextVisitDecls+                         _lhsIoptCase+                         _lhsIprefix ->+                           (let _lhsOlambdas :: ([Decl])+                                _lhsOfirstCall :: Expr+                                _blocksOblockNr :: Int+                                _blocksOlastExprVars :: ([String])+                                _blocksOnextVisitDecls :: ([Decl])+                                _blocksOoptCase :: Bool+                                _blocksOprefix :: String+                                _blocksIcallExpr :: Expr+                                _blocksIdecls :: ([Decl])+                                _blocksIfreeVars :: ([String])+                                -- "GenerateCode.ag"(line 434, column 7)+                                _lhsOlambdas =+                                    _blocksIdecls+                                -- "GenerateCode.ag"(line 435, column 7)+                                _lhsOfirstCall =+                                    _blocksIcallExpr+                                -- "GenerateCode.ag"(line 440, column 7)+                                _blocksOblockNr =+                                    1+                                -- copy rule (down)+                                _blocksOlastExprVars =+                                    _lhsIlastExprVars+                                -- copy rule (down)+                                _blocksOnextVisitDecls =+                                    _lhsInextVisitDecls+                                -- copy rule (down)+                                _blocksOoptCase =+                                    _lhsIoptCase+                                -- copy rule (down)+                                _blocksOprefix =+                                    _lhsIprefix+                                ( _blocksIcallExpr,_blocksIdecls,_blocksIfreeVars) =+                                    (blocks_ _blocksOblockNr _blocksOlastExprVars _blocksOnextVisitDecls _blocksOoptCase _blocksOprefix )+                            in  ( _lhsOfirstCall,_lhsOlambdas))) )+-- Pattern -----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         definedInsts         : [Identifier]+         patternAttributes    : [(Name, Name)]+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local copy        : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts )  =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+sem_Pattern (Constr _name _pats )  =+    (sem_Pattern_Constr _name (sem_Patterns _pats ) )+sem_Pattern (Product _pos _pats )  =+    (sem_Pattern_Product _pos (sem_Patterns _pats ) )+sem_Pattern (Underscore _pos )  =+    (sem_Pattern_Underscore _pos )+-- semantic domain+newtype T_Pattern = T_Pattern (( Pattern,([Identifier]),([(Name, Name)])))+data Inh_Pattern = Inh_Pattern {}+data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: Pattern,definedInsts_Syn_Pattern :: [Identifier],patternAttributes_Syn_Pattern :: [(Name, Name)]}+wrap_Pattern (T_Pattern sem ) (Inh_Pattern )  =+    (let ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes) =+             (sem )+     in  (Syn_Pattern _lhsOcopy _lhsOdefinedInsts _lhsOpatternAttributes ))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ )  =+    (T_Pattern (let _lhsOdefinedInsts :: ([Identifier])+                    _lhsOpatternAttributes :: ([(Name, Name)])+                    _lhsOcopy :: Pattern+                    _patIcopy :: Pattern+                    _patIdefinedInsts :: ([Identifier])+                    _patIpatternAttributes :: ([(Name, Name)])+                    _partsIcopy :: Patterns+                    _partsIdefinedInsts :: ([Identifier])+                    _partsIpatternAttributes :: ([(Name, Name)])+                    -- "GenerateCode.ag"(line 142, column 11)+                    _lhsOdefinedInsts =+                        (if field_ == _INST then [attr_] else []) ++ _patIdefinedInsts+                    -- "GenerateCode.ag"(line 150, column 7)+                    _lhsOpatternAttributes =+                        (field_,attr_) : (_patIpatternAttributes ++ _partsIpatternAttributes)+                    -- self rule+                    _copy =+                        Alias field_ attr_ _patIcopy _partsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patIcopy,_patIdefinedInsts,_patIpatternAttributes) =+                        (pat_ )+                    ( _partsIcopy,_partsIdefinedInsts,_partsIpatternAttributes) =+                        (parts_ )+                in  ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes)) )+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_ )  =+    (T_Pattern (let _lhsOdefinedInsts :: ([Identifier])+                    _lhsOpatternAttributes :: ([(Name, Name)])+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIdefinedInsts :: ([Identifier])+                    _patsIpatternAttributes :: ([(Name, Name)])+                    -- use rule "GenerateCode.ag"(line 140, column 55)+                    _lhsOdefinedInsts =+                        _patsIdefinedInsts+                    -- use rule "GenerateCode.ag"(line 147, column 47)+                    _lhsOpatternAttributes =+                        _patsIpatternAttributes+                    -- self rule+                    _copy =+                        Constr name_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIdefinedInsts,_patsIpatternAttributes) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes)) )+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_ )  =+    (T_Pattern (let _lhsOdefinedInsts :: ([Identifier])+                    _lhsOpatternAttributes :: ([(Name, Name)])+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIdefinedInsts :: ([Identifier])+                    _patsIpatternAttributes :: ([(Name, Name)])+                    -- use rule "GenerateCode.ag"(line 140, column 55)+                    _lhsOdefinedInsts =+                        _patsIdefinedInsts+                    -- use rule "GenerateCode.ag"(line 147, column 47)+                    _lhsOpatternAttributes =+                        _patsIpatternAttributes+                    -- self rule+                    _copy =+                        Product pos_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIdefinedInsts,_patsIpatternAttributes) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes)) )+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_  =+    (T_Pattern (let _lhsOdefinedInsts :: ([Identifier])+                    _lhsOpatternAttributes :: ([(Name, Name)])+                    _lhsOcopy :: Pattern+                    -- use rule "GenerateCode.ag"(line 140, column 55)+                    _lhsOdefinedInsts =+                        []+                    -- use rule "GenerateCode.ag"(line 147, column 47)+                    _lhsOpatternAttributes =+                        []+                    -- self rule+                    _copy =+                        Underscore pos_+                    -- self rule+                    _lhsOcopy =+                        _copy+                in  ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes)) )+-- Patterns ----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         definedInsts         : [Identifier]+         patternAttributes    : [(Name, Name)]+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+      alternative Nil:+         visit 0:+            local copy        : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list  =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns (( Patterns,([Identifier]),([(Name, Name)])))+data Inh_Patterns = Inh_Patterns {}+data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: Patterns,definedInsts_Syn_Patterns :: [Identifier],patternAttributes_Syn_Patterns :: [(Name, Name)]}+wrap_Patterns (T_Patterns sem ) (Inh_Patterns )  =+    (let ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes) =+             (sem )+     in  (Syn_Patterns _lhsOcopy _lhsOdefinedInsts _lhsOpatternAttributes ))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =+    (T_Patterns (let _lhsOdefinedInsts :: ([Identifier])+                     _lhsOpatternAttributes :: ([(Name, Name)])+                     _lhsOcopy :: Patterns+                     _hdIcopy :: Pattern+                     _hdIdefinedInsts :: ([Identifier])+                     _hdIpatternAttributes :: ([(Name, Name)])+                     _tlIcopy :: Patterns+                     _tlIdefinedInsts :: ([Identifier])+                     _tlIpatternAttributes :: ([(Name, Name)])+                     -- use rule "GenerateCode.ag"(line 140, column 55)+                     _lhsOdefinedInsts =+                         _hdIdefinedInsts ++ _tlIdefinedInsts+                     -- use rule "GenerateCode.ag"(line 147, column 47)+                     _lhsOpatternAttributes =+                         _hdIpatternAttributes ++ _tlIpatternAttributes+                     -- self rule+                     _copy =+                         (:) _hdIcopy _tlIcopy+                     -- self rule+                     _lhsOcopy =+                         _copy+                     ( _hdIcopy,_hdIdefinedInsts,_hdIpatternAttributes) =+                         (hd_ )+                     ( _tlIcopy,_tlIdefinedInsts,_tlIpatternAttributes) =+                         (tl_ )+                 in  ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes)) )+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (let _lhsOdefinedInsts :: ([Identifier])+                     _lhsOpatternAttributes :: ([(Name, Name)])+                     _lhsOcopy :: Patterns+                     -- use rule "GenerateCode.ag"(line 140, column 55)+                     _lhsOdefinedInsts =+                         []+                     -- use rule "GenerateCode.ag"(line 147, column 47)+                     _lhsOpatternAttributes =+                         []+                     -- self rule+                     _copy =+                         []+                     -- self rule+                     _lhsOcopy =+                         _copy+                 in  ( _lhsOcopy,_lhsOdefinedInsts,_lhsOpatternAttributes)) )+-- Sequence ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         children             : [(Name,Type,Bool)]+         con                  : Constructor+         higherOrderChildren  : [(Name,Type,Bool)]+         inh                  : Attributes+         instVisitNrs         : Map Identifier Int+         lastExpr             : Expr+         nr                   : Int+         nt                   : Nonterminal+         o_case               : Bool+         o_cata               : Bool+         o_costcentre         : Bool+         o_data               : Maybe Bool+         o_linePragmas        : Bool+         o_newtypes           : Bool+         o_pretty             : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_splitsems          : Bool+         o_strictwrap         : Bool+         o_traces             : Bool+         o_unbox              : Bool+         prefix               : String+         syn                  : Attributes+         terminals            : [Name]+         what                 : String+      chained attributes:+         declsAbove           : [Decl]+         errors               : Seq Error+      synthesized attributes:+         allTpsFound          : Bool+         blockDecls           : DeclBlocks+         comments             : [String]+         decls                : Decls+         definedInsts         : [Identifier]+         exprs                : Exprs+         tSigs                : [Decl]+         tps                  : [Type]+         usedVars             : Set String+   alternatives:+      alternative Cons:+         child hd             : CRule+         child tl             : Sequence+      alternative Nil:+-}+-- cata+sem_Sequence :: Sequence ->+                T_Sequence+sem_Sequence list  =+    (Prelude.foldr sem_Sequence_Cons sem_Sequence_Nil (Prelude.map sem_CRule list) )+-- semantic domain+newtype T_Sequence = T_Sequence (([(Name,Type,Bool)]) ->+                                 Constructor ->+                                 ([Decl]) ->+                                 (Seq Error) ->+                                 ([(Name,Type,Bool)]) ->+                                 Attributes ->+                                 (Map Identifier Int) ->+                                 Expr ->+                                 Int ->+                                 Nonterminal ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 (Maybe Bool) ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 Bool ->+                                 String ->+                                 Attributes ->+                                 ([Name]) ->+                                 String ->+                                 ( Bool,DeclBlocks,([String]),Decls,([Decl]),([Identifier]),(Seq Error),Exprs,([Decl]),([Type]),(Set String)))+data Inh_Sequence = Inh_Sequence {children_Inh_Sequence :: [(Name,Type,Bool)],con_Inh_Sequence :: Constructor,declsAbove_Inh_Sequence :: [Decl],errors_Inh_Sequence :: Seq Error,higherOrderChildren_Inh_Sequence :: [(Name,Type,Bool)],inh_Inh_Sequence :: Attributes,instVisitNrs_Inh_Sequence :: Map Identifier Int,lastExpr_Inh_Sequence :: Expr,nr_Inh_Sequence :: Int,nt_Inh_Sequence :: Nonterminal,o_case_Inh_Sequence :: Bool,o_cata_Inh_Sequence :: Bool,o_costcentre_Inh_Sequence :: Bool,o_data_Inh_Sequence :: Maybe Bool,o_linePragmas_Inh_Sequence :: Bool,o_newtypes_Inh_Sequence :: Bool,o_pretty_Inh_Sequence :: Bool,o_rename_Inh_Sequence :: Bool,o_sem_Inh_Sequence :: Bool,o_sig_Inh_Sequence :: Bool,o_splitsems_Inh_Sequence :: Bool,o_strictwrap_Inh_Sequence :: Bool,o_traces_Inh_Sequence :: Bool,o_unbox_Inh_Sequence :: Bool,prefix_Inh_Sequence :: String,syn_Inh_Sequence :: Attributes,terminals_Inh_Sequence :: [Name],what_Inh_Sequence :: String}+data Syn_Sequence = Syn_Sequence {allTpsFound_Syn_Sequence :: Bool,blockDecls_Syn_Sequence :: DeclBlocks,comments_Syn_Sequence :: [String],decls_Syn_Sequence :: Decls,declsAbove_Syn_Sequence :: [Decl],definedInsts_Syn_Sequence :: [Identifier],errors_Syn_Sequence :: Seq Error,exprs_Syn_Sequence :: Exprs,tSigs_Syn_Sequence :: [Decl],tps_Syn_Sequence :: [Type],usedVars_Syn_Sequence :: Set String}+wrap_Sequence (T_Sequence sem ) (Inh_Sequence _lhsIchildren _lhsIcon _lhsIdeclsAbove _lhsIerrors _lhsIhigherOrderChildren _lhsIinh _lhsIinstVisitNrs _lhsIlastExpr _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwhat )  =+    (let ( _lhsOallTpsFound,_lhsOblockDecls,_lhsOcomments,_lhsOdecls,_lhsOdeclsAbove,_lhsOdefinedInsts,_lhsOerrors,_lhsOexprs,_lhsOtSigs,_lhsOtps,_lhsOusedVars) =+             (sem _lhsIchildren _lhsIcon _lhsIdeclsAbove _lhsIerrors _lhsIhigherOrderChildren _lhsIinh _lhsIinstVisitNrs _lhsIlastExpr _lhsInr _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_costcentre _lhsIo_data _lhsIo_linePragmas _lhsIo_newtypes _lhsIo_pretty _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_splitsems _lhsIo_strictwrap _lhsIo_traces _lhsIo_unbox _lhsIprefix _lhsIsyn _lhsIterminals _lhsIwhat )+     in  (Syn_Sequence _lhsOallTpsFound _lhsOblockDecls _lhsOcomments _lhsOdecls _lhsOdeclsAbove _lhsOdefinedInsts _lhsOerrors _lhsOexprs _lhsOtSigs _lhsOtps _lhsOusedVars ))+sem_Sequence_Cons :: T_CRule ->+                     T_Sequence ->+                     T_Sequence+sem_Sequence_Cons (T_CRule hd_ ) (T_Sequence tl_ )  =+    (T_Sequence (\ _lhsIchildren+                   _lhsIcon+                   _lhsIdeclsAbove+                   _lhsIerrors+                   _lhsIhigherOrderChildren+                   _lhsIinh+                   _lhsIinstVisitNrs+                   _lhsIlastExpr+                   _lhsInr+                   _lhsInt+                   _lhsIo_case+                   _lhsIo_cata+                   _lhsIo_costcentre+                   _lhsIo_data+                   _lhsIo_linePragmas+                   _lhsIo_newtypes+                   _lhsIo_pretty+                   _lhsIo_rename+                   _lhsIo_sem+                   _lhsIo_sig+                   _lhsIo_splitsems+                   _lhsIo_strictwrap+                   _lhsIo_traces+                   _lhsIo_unbox+                   _lhsIprefix+                   _lhsIsyn+                   _lhsIterminals+                   _lhsIwhat ->+                     (let _lhsOblockDecls :: DeclBlocks+                          _lhsOallTpsFound :: Bool+                          _lhsOcomments :: ([String])+                          _lhsOdecls :: Decls+                          _lhsOdefinedInsts :: ([Identifier])+                          _lhsOerrors :: (Seq Error)+                          _lhsOexprs :: Exprs+                          _lhsOtSigs :: ([Decl])+                          _lhsOtps :: ([Type])+                          _lhsOusedVars :: (Set String)+                          _lhsOdeclsAbove :: ([Decl])+                          _hdOchildren :: ([(Name,Type,Bool)])+                          _hdOcon :: Constructor+                          _hdOdeclsAbove :: ([Decl])+                          _hdOerrors :: (Seq Error)+                          _hdOhigherOrderChildren :: ([(Name,Type,Bool)])+                          _hdOinh :: Attributes+                          _hdOinstVisitNrs :: (Map Identifier Int)+                          _hdOnr :: Int+                          _hdOnt :: Nonterminal+                          _hdOo_case :: Bool+                          _hdOo_cata :: Bool+                          _hdOo_costcentre :: Bool+                          _hdOo_data :: (Maybe Bool)+                          _hdOo_linePragmas :: Bool+                          _hdOo_newtypes :: Bool+                          _hdOo_pretty :: Bool+                          _hdOo_rename :: Bool+                          _hdOo_sem :: Bool+                          _hdOo_sig :: Bool+                          _hdOo_splitsems :: Bool+                          _hdOo_strictwrap :: Bool+                          _hdOo_traces :: Bool+                          _hdOo_unbox :: Bool+                          _hdOprefix :: String+                          _hdOsyn :: Attributes+                          _hdOterminals :: ([Name])+                          _hdOwhat :: String+                          _tlOchildren :: ([(Name,Type,Bool)])+                          _tlOcon :: Constructor+                          _tlOdeclsAbove :: ([Decl])+                          _tlOerrors :: (Seq Error)+                          _tlOhigherOrderChildren :: ([(Name,Type,Bool)])+                          _tlOinh :: Attributes+                          _tlOinstVisitNrs :: (Map Identifier Int)+                          _tlOlastExpr :: Expr+                          _tlOnr :: Int+                          _tlOnt :: Nonterminal+                          _tlOo_case :: Bool+                          _tlOo_cata :: Bool+                          _tlOo_costcentre :: Bool+                          _tlOo_data :: (Maybe Bool)+                          _tlOo_linePragmas :: Bool+                          _tlOo_newtypes :: Bool+                          _tlOo_pretty :: Bool+                          _tlOo_rename :: Bool+                          _tlOo_sem :: Bool+                          _tlOo_sig :: Bool+                          _tlOo_splitsems :: Bool+                          _tlOo_strictwrap :: Bool+                          _tlOo_traces :: Bool+                          _tlOo_unbox :: Bool+                          _tlOprefix :: String+                          _tlOsyn :: Attributes+                          _tlOterminals :: ([Name])+                          _tlOwhat :: String+                          _hdIallTpsFound :: Bool+                          _hdIbldBlocksFun :: (DeclBlocks -> DeclBlocks)+                          _hdIcomments :: ([String])+                          _hdIdecls :: Decls+                          _hdIdeclsAbove :: ([Decl])+                          _hdIdefinedInsts :: ([Identifier])+                          _hdIerrors :: (Seq Error)+                          _hdIexprs :: Exprs+                          _hdItSigs :: ([Decl])+                          _hdItps :: ([Type])+                          _hdIusedVars :: (Set String)+                          _tlIallTpsFound :: Bool+                          _tlIblockDecls :: DeclBlocks+                          _tlIcomments :: ([String])+                          _tlIdecls :: Decls+                          _tlIdeclsAbove :: ([Decl])+                          _tlIdefinedInsts :: ([Identifier])+                          _tlIerrors :: (Seq Error)+                          _tlIexprs :: Exprs+                          _tlItSigs :: ([Decl])+                          _tlItps :: ([Type])+                          _tlIusedVars :: (Set String)+                          -- "GenerateCode.ag"(line 375, column 7)+                          _lhsOblockDecls =+                              _hdIbldBlocksFun _tlIblockDecls+                          -- use rule "GenerateCode.ag"(line 265, column 39)+                          _lhsOallTpsFound =+                              _hdIallTpsFound && _tlIallTpsFound+                          -- use rule "GenerateCode.ag"(line 583, column 52)+                          _lhsOcomments =+                              _hdIcomments ++ _tlIcomments+                          -- use rule "GenerateCode.ag"(line 87, column 34)+                          _lhsOdecls =+                              _hdIdecls ++ _tlIdecls+                          -- use rule "GenerateCode.ag"(line 140, column 55)+                          _lhsOdefinedInsts =+                              _hdIdefinedInsts ++ _tlIdefinedInsts+                          -- use rule "GenerateCode.ag"(line 564, column 32)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- use rule "GenerateCode.ag"(line 213, column 34)+                          _lhsOexprs =+                              _hdIexprs ++ _tlIexprs+                          -- use rule "GenerateCode.ag"(line 238, column 33)+                          _lhsOtSigs =+                              _hdItSigs ++ _tlItSigs+                          -- use rule "GenerateCode.ag"(line 264, column 31)+                          _lhsOtps =+                              _hdItps ++ _tlItps+                          -- use rule "GenerateCode.ag"(line 227, column 37)+                          _lhsOusedVars =+                              _hdIusedVars `Set.union` _tlIusedVars+                          -- copy rule (up)+                          _lhsOdeclsAbove =+                              _tlIdeclsAbove+                          -- copy rule (down)+                          _hdOchildren =+                              _lhsIchildren+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOdeclsAbove =+                              _lhsIdeclsAbove+                          -- copy rule (down)+                          _hdOerrors =+                              _lhsIerrors+                          -- copy rule (down)+                          _hdOhigherOrderChildren =+                              _lhsIhigherOrderChildren+                          -- copy rule (down)+                          _hdOinh =+                              _lhsIinh+                          -- copy rule (down)+                          _hdOinstVisitNrs =+                              _lhsIinstVisitNrs+                          -- copy rule (down)+                          _hdOnr =+                              _lhsInr+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (down)+                          _hdOo_case =+                              _lhsIo_case+                          -- copy rule (down)+                          _hdOo_cata =+                              _lhsIo_cata+                          -- copy rule (down)+                          _hdOo_costcentre =+                              _lhsIo_costcentre+                          -- copy rule (down)+                          _hdOo_data =+                              _lhsIo_data+                          -- copy rule (down)+                          _hdOo_linePragmas =+                              _lhsIo_linePragmas+                          -- copy rule (down)+                          _hdOo_newtypes =+                              _lhsIo_newtypes+                          -- copy rule (down)+                          _hdOo_pretty =+                              _lhsIo_pretty+                          -- copy rule (down)+                          _hdOo_rename =+                              _lhsIo_rename+                          -- copy rule (down)+                          _hdOo_sem =+                              _lhsIo_sem+                          -- copy rule (down)+                          _hdOo_sig =+                              _lhsIo_sig+                          -- copy rule (down)+                          _hdOo_splitsems =+                              _lhsIo_splitsems+                          -- copy rule (down)+                          _hdOo_strictwrap =+                              _lhsIo_strictwrap+                          -- copy rule (down)+                          _hdOo_traces =+                              _lhsIo_traces+                          -- copy rule (down)+                          _hdOo_unbox =+                              _lhsIo_unbox+                          -- copy rule (down)+                          _hdOprefix =+                              _lhsIprefix+                          -- copy rule (down)+                          _hdOsyn =+                              _lhsIsyn+                          -- copy rule (down)+                          _hdOterminals =+                              _lhsIterminals+                          -- copy rule (down)+                          _hdOwhat =+                              _lhsIwhat+                          -- copy rule (down)+                          _tlOchildren =+                              _lhsIchildren+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (chain)+                          _tlOdeclsAbove =+                              _hdIdeclsAbove+                          -- copy rule (chain)+                          _tlOerrors =+                              _hdIerrors+                          -- copy rule (down)+                          _tlOhigherOrderChildren =+                              _lhsIhigherOrderChildren+                          -- copy rule (down)+                          _tlOinh =+                              _lhsIinh+                          -- copy rule (down)+                          _tlOinstVisitNrs =+                              _lhsIinstVisitNrs+                          -- copy rule (down)+                          _tlOlastExpr =+                              _lhsIlastExpr+                          -- copy rule (down)+                          _tlOnr =+                              _lhsInr+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          -- copy rule (down)+                          _tlOo_case =+                              _lhsIo_case+                          -- copy rule (down)+                          _tlOo_cata =+                              _lhsIo_cata+                          -- copy rule (down)+                          _tlOo_costcentre =+                              _lhsIo_costcentre+                          -- copy rule (down)+                          _tlOo_data =+                              _lhsIo_data+                          -- copy rule (down)+                          _tlOo_linePragmas =+                              _lhsIo_linePragmas+                          -- copy rule (down)+                          _tlOo_newtypes =+                              _lhsIo_newtypes+                          -- copy rule (down)+                          _tlOo_pretty =+                              _lhsIo_pretty+                          -- copy rule (down)+                          _tlOo_rename =+                              _lhsIo_rename+                          -- copy rule (down)+                          _tlOo_sem =+                              _lhsIo_sem+                          -- copy rule (down)+                          _tlOo_sig =+                              _lhsIo_sig+                          -- copy rule (down)+                          _tlOo_splitsems =+                              _lhsIo_splitsems+                          -- copy rule (down)+                          _tlOo_strictwrap =+                              _lhsIo_strictwrap+                          -- copy rule (down)+                          _tlOo_traces =+                              _lhsIo_traces+                          -- copy rule (down)+                          _tlOo_unbox =+                              _lhsIo_unbox+                          -- copy rule (down)+                          _tlOprefix =+                              _lhsIprefix+                          -- copy rule (down)+                          _tlOsyn =+                              _lhsIsyn+                          -- copy rule (down)+                          _tlOterminals =+                              _lhsIterminals+                          -- copy rule (down)+                          _tlOwhat =+                              _lhsIwhat+                          ( _hdIallTpsFound,_hdIbldBlocksFun,_hdIcomments,_hdIdecls,_hdIdeclsAbove,_hdIdefinedInsts,_hdIerrors,_hdIexprs,_hdItSigs,_hdItps,_hdIusedVars) =+                              (hd_ _hdOchildren _hdOcon _hdOdeclsAbove _hdOerrors _hdOhigherOrderChildren _hdOinh _hdOinstVisitNrs _hdOnr _hdOnt _hdOo_case _hdOo_cata _hdOo_costcentre _hdOo_data _hdOo_linePragmas _hdOo_newtypes _hdOo_pretty _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_splitsems _hdOo_strictwrap _hdOo_traces _hdOo_unbox _hdOprefix _hdOsyn _hdOterminals _hdOwhat )+                          ( _tlIallTpsFound,_tlIblockDecls,_tlIcomments,_tlIdecls,_tlIdeclsAbove,_tlIdefinedInsts,_tlIerrors,_tlIexprs,_tlItSigs,_tlItps,_tlIusedVars) =+                              (tl_ _tlOchildren _tlOcon _tlOdeclsAbove _tlOerrors _tlOhigherOrderChildren _tlOinh _tlOinstVisitNrs _tlOlastExpr _tlOnr _tlOnt _tlOo_case _tlOo_cata _tlOo_costcentre _tlOo_data _tlOo_linePragmas _tlOo_newtypes _tlOo_pretty _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_splitsems _tlOo_strictwrap _tlOo_traces _tlOo_unbox _tlOprefix _tlOsyn _tlOterminals _tlOwhat )+                      in  ( _lhsOallTpsFound,_lhsOblockDecls,_lhsOcomments,_lhsOdecls,_lhsOdeclsAbove,_lhsOdefinedInsts,_lhsOerrors,_lhsOexprs,_lhsOtSigs,_lhsOtps,_lhsOusedVars))) )+sem_Sequence_Nil :: T_Sequence+sem_Sequence_Nil  =+    (T_Sequence (\ _lhsIchildren+                   _lhsIcon+                   _lhsIdeclsAbove+                   _lhsIerrors+                   _lhsIhigherOrderChildren+                   _lhsIinh+                   _lhsIinstVisitNrs+                   _lhsIlastExpr+                   _lhsInr+                   _lhsInt+                   _lhsIo_case+                   _lhsIo_cata+                   _lhsIo_costcentre+                   _lhsIo_data+                   _lhsIo_linePragmas+                   _lhsIo_newtypes+                   _lhsIo_pretty+                   _lhsIo_rename+                   _lhsIo_sem+                   _lhsIo_sig+                   _lhsIo_splitsems+                   _lhsIo_strictwrap+                   _lhsIo_traces+                   _lhsIo_unbox+                   _lhsIprefix+                   _lhsIsyn+                   _lhsIterminals+                   _lhsIwhat ->+                     (let _lhsOblockDecls :: DeclBlocks+                          _lhsOallTpsFound :: Bool+                          _lhsOcomments :: ([String])+                          _lhsOdecls :: Decls+                          _lhsOdefinedInsts :: ([Identifier])+                          _lhsOerrors :: (Seq Error)+                          _lhsOexprs :: Exprs+                          _lhsOtSigs :: ([Decl])+                          _lhsOtps :: ([Type])+                          _lhsOusedVars :: (Set String)+                          _lhsOdeclsAbove :: ([Decl])+                          -- "GenerateCode.ag"(line 377, column 7)+                          _lhsOblockDecls =+                              DeclTerminator _lhsIdeclsAbove _lhsIlastExpr+                          -- use rule "GenerateCode.ag"(line 265, column 39)+                          _lhsOallTpsFound =+                              True+                          -- use rule "GenerateCode.ag"(line 583, column 52)+                          _lhsOcomments =+                              []+                          -- use rule "GenerateCode.ag"(line 87, column 34)+                          _lhsOdecls =+                              []+                          -- use rule "GenerateCode.ag"(line 140, column 55)+                          _lhsOdefinedInsts =+                              []+                          -- use rule "GenerateCode.ag"(line 564, column 32)+                          _lhsOerrors =+                              Seq.empty+                          -- use rule "GenerateCode.ag"(line 213, column 34)+                          _lhsOexprs =+                              []+                          -- use rule "GenerateCode.ag"(line 238, column 33)+                          _lhsOtSigs =+                              []+                          -- use rule "GenerateCode.ag"(line 264, column 31)+                          _lhsOtps =+                              []+                          -- use rule "GenerateCode.ag"(line 227, column 37)+                          _lhsOusedVars =+                              Set.empty+                          -- copy rule (chain)+                          _lhsOdeclsAbove =+                              _lhsIdeclsAbove+                      in  ( _lhsOallTpsFound,_lhsOblockDecls,_lhsOcomments,_lhsOdecls,_lhsOdeclsAbove,_lhsOdefinedInsts,_lhsOerrors,_lhsOexprs,_lhsOtSigs,_lhsOtps,_lhsOusedVars))) )
+ src-derived/HsToken.hs view
@@ -0,0 +1,51 @@++-- UUAGC 0.9.5 (HsToken.ag)+module HsToken where++import CommonTypes+import UU.Scanner.Position(Pos)+-- HsToken -----------------------------------------------------+{-+   alternatives:+      alternative AGField:+         child field          : {Name}+         child attr           : {Name}+         child pos            : {Pos}+      alternative AGLocal:+         child var            : {Name}+         child pos            : {Pos}+      alternative CharToken:+         child value          : {String}+         child pos            : {Pos}+      alternative Err:+         child mesg           : {String}+         child pos            : {Pos}+      alternative HsToken:+         child value          : {String}+         child pos            : {Pos}+      alternative StrToken:+         child value          : {String}+         child pos            : {Pos}+-}+data HsToken = AGField (Name) (Name) (Pos) +             | AGLocal (Name) (Pos) +             | CharToken (String) (Pos) +             | Err (String) (Pos) +             | HsToken (String) (Pos) +             | StrToken (String) (Pos) +-- HsTokens ----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : HsToken+         child tl             : HsTokens+      alternative Nil:+-}+type HsTokens = [HsToken]+-- HsTokensRoot ------------------------------------------------+{-+   alternatives:+      alternative HsTokensRoot:+         child tokens         : HsTokens+-}+data HsTokensRoot = HsTokensRoot (HsTokens) 
+ src-derived/Interfaces.hs view
@@ -0,0 +1,48 @@++-- UUAGC 0.9.5 (Interfaces.ag)+module Interfaces where++import CommonTypes+import SequentialTypes+-- IRoot -------------------------------------------------------+{-+   alternatives:+      alternative IRoot:+         child inters         : Interfaces+-}+data IRoot = IRoot (Interfaces) +-- Interface ---------------------------------------------------+{-+   alternatives:+      alternative Interface:+         child nt             : {Nonterminal}+         child cons           : {[Constructor]}+         child seg            : Segments+-}+data Interface = Interface (Nonterminal) ([Constructor]) (Segments) +-- Interfaces --------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Interface+         child tl             : Interfaces+      alternative Nil:+-}+type Interfaces = [Interface]+-- Segment -----------------------------------------------------+{-+   alternatives:+      alternative Segment:+         child inh            : {[Vertex]}+         child syn            : {[Vertex]}+-}+data Segment = Segment ([Vertex]) ([Vertex]) +-- Segments ----------------------------------------------------+{-+   alternatives:+      alternative Cons:+         child hd             : Segment+         child tl             : Segments+      alternative Nil:+-}+type Segments = [Segment]
+ src-derived/InterfacesRules.hs view
@@ -0,0 +1,1069 @@++-- UUAGC 0.9.5 (InterfacesRules.lag)+module InterfacesRules where++import Interfaces+import SequentialTypes+import CodeSyntax+import GrammarInfo++import UU.DData.Seq as Seq+import qualified Data.Map as Map+import Data.Map(Map)+import qualified Data.Set as Set+import Data.Set(Set)+import Data.Tree(Tree(Node))+import Data.Graph(Graph, dfs, edges, buildG, transposeG)+import Data.Maybe (fromJust)+import Data.List (partition,transpose,(\\),nub,intersect)+import Data.Array ((!),inRange,bounds,assocs)++import Debug.Trace(trace)++import CommonTypes+import SequentialTypes++type VisitSS = [Vertex]++gather :: Info -> [Vertex] -> [[Vertex]]+gather info =  eqClasses comp+               where comp a b = isEqualField (ruleTable info ! a) (ruleTable info ! b)++-- Only non-empty syn will ever be forced, because visits with empty syn are never performed+-- Right hand side synthesized attributes always have a field+cv :: (Vertex -> CRule) -> Int -> Vertex -> ([Vertex],[Vertex]) -> (Vertex,ChildVisit)+cv look n v (inh,syn) =  let  fld = getField (look (head syn))+                              rnt = fromJust (getRhsNt (look (head syn)))+                              d = ChildVisit fld rnt n inh syn+                         in (v,d)++ed v (inh,syn) = map (\i -> (i,v)) inh ++ map (\s -> (v,s)) syn++postorder (Node a ts) = postorderF ts ++ [a]+postorderF = concatMap postorder+postOrd g = postorderF . dfs g+topSort' g = postOrd g++type IntraVisit = [Vertex]++swap (a,b) = (b,a)++ccv :: Name -> Nonterminal -> Int -> CInterfaceMap -> CRule+ccv name nt n table+  =  CChildVisit name nt n inh syn last+     where  CInterface segs = Map.findWithDefault (error ("InterfacesRules::ccv::interfaces not in table for nt: " ++ show nt)) nt table+            (seg:remain) = drop n segs+            CSegment inh syn = seg           +            last = null remain+-- IRoot -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         dpr                  : [Edge]+         info                 : Info+         tdp                  : Graph+      synthesized attributes:+         edp                  : [Edge]+         inters               : CInterfaceMap+         visits               : CVisitsMap+   alternatives:+      alternative IRoot:+         child inters         : Interfaces+         visit 0:+            local newedges    : _+            local visitssGraph : _+            local descr       : _+-}+-- cata+sem_IRoot :: IRoot ->+             T_IRoot+sem_IRoot (IRoot _inters )  =+    (sem_IRoot_IRoot (sem_Interfaces _inters ) )+-- semantic domain+newtype T_IRoot = T_IRoot (([Edge]) ->+                           Info ->+                           Graph ->+                           ( ([Edge]),CInterfaceMap,CVisitsMap))+data Inh_IRoot = Inh_IRoot {dpr_Inh_IRoot :: [Edge],info_Inh_IRoot :: Info,tdp_Inh_IRoot :: Graph}+data Syn_IRoot = Syn_IRoot {edp_Syn_IRoot :: [Edge],inters_Syn_IRoot :: CInterfaceMap,visits_Syn_IRoot :: CVisitsMap}+wrap_IRoot (T_IRoot sem ) (Inh_IRoot _lhsIdpr _lhsIinfo _lhsItdp )  =+    (let ( _lhsOedp,_lhsOinters,_lhsOvisits) =+             (sem _lhsIdpr _lhsIinfo _lhsItdp )+     in  (Syn_IRoot _lhsOedp _lhsOinters _lhsOvisits ))+sem_IRoot_IRoot :: T_Interfaces ->+                   T_IRoot+sem_IRoot_IRoot (T_Interfaces inters_ )  =+    (T_IRoot (\ _lhsIdpr+                _lhsIinfo+                _lhsItdp ->+                  (let _intersOv :: Vertex+                       _intersOvisitDescr :: (Map Vertex ChildVisit)+                       _intersOvssGraph :: Graph+                       _intersOprev :: ([Vertex])+                       _intersOddp :: Graph+                       _intersOallInters :: CInterfaceMap+                       _lhsOedp :: ([Edge])+                       _lhsOinters :: CInterfaceMap+                       _lhsOvisits :: CVisitsMap+                       _intersOinfo :: Info+                       _intersIdescr :: (Seq (Vertex,ChildVisit))+                       _intersIedp :: (Seq Edge)+                       _intersIfirstvisitvertices :: ([Vertex])+                       _intersIinters :: CInterfaceMap+                       _intersInewedges :: (Seq Edge )+                       _intersIv :: Vertex+                       _intersIvisits :: CVisitsMap+                       -- "InterfacesRules.lag"(line 64, column 12)+                       _newedges =+                           Seq.toList _intersInewedges+                       -- "InterfacesRules.lag"(line 65, column 12)+                       _visitssGraph =+                           let graph = buildG (0,_intersIv-1) es+                               es = _newedges ++ edges _lhsItdp+                           in transposeG graph+                       -- "InterfacesRules.lag"(line 78, column 12)+                       _intersOv =+                           snd (bounds _lhsItdp) + 1+                       -- "InterfacesRules.lag"(line 115, column 13)+                       _intersOvisitDescr =+                           Map.fromList _descr+                       -- "InterfacesRules.lag"(line 135, column 12)+                       _descr =+                           Seq.toList _intersIdescr+                       -- "InterfacesRules.lag"(line 204, column 12)+                       _intersOvssGraph =+                           _visitssGraph+                       -- "InterfacesRules.lag"(line 246, column 12)+                       _intersOprev =+                           let terminals = [ v | (v,cr) <- assocs (ruleTable _lhsIinfo), not (getHasCode cr), isLocal cr ]+                           in _intersIfirstvisitvertices ++ terminals+                       -- "InterfacesRules.lag"(line 325, column 12)+                       _intersOddp =+                           buildG (0,_intersIv-1) (map swap (_lhsIdpr ++ _newedges))+                       -- "InterfacesRules.lag"(line 362, column 13)+                       _intersOallInters =+                           _intersIinters+                       -- "InterfacesRules.lag"(line 422, column 13)+                       _lhsOedp =+                           Seq.toList _intersIedp+                       -- copy rule (up)+                       _lhsOinters =+                           _intersIinters+                       -- copy rule (up)+                       _lhsOvisits =+                           _intersIvisits+                       -- copy rule (down)+                       _intersOinfo =+                           _lhsIinfo+                       ( _intersIdescr,_intersIedp,_intersIfirstvisitvertices,_intersIinters,_intersInewedges,_intersIv,_intersIvisits) =+                           (inters_ _intersOallInters _intersOddp _intersOinfo _intersOprev _intersOv _intersOvisitDescr _intersOvssGraph )+                   in  ( _lhsOedp,_lhsOinters,_lhsOvisits))) )+-- Interface ---------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allInters            : CInterfaceMap+         ddp                  : Graph+         info                 : Info+         prev                 : [Vertex]+         visitDescr           : Map Vertex ChildVisit+         vssGraph             : Graph+      chained attribute:+         v                    : Vertex+      synthesized attributes:+         descr                : Seq (Vertex,ChildVisit)+         edp                  : Seq Edge+         firstvisitvertices   : [Vertex]+         inter                : CInterface+         newedges             : Seq Edge +         nt                   : Nonterminal+         visits               : Map Constructor CVisits+   alternatives:+      alternative Interface:+         child nt             : {Nonterminal}+         child cons           : {[Constructor]}+         child seg            : Segments+         visit 0:+            local v           : _+            local firstvisitvertices : _+            local newedges    : _+            local look        : _+            local descr       : _+-}+-- cata+sem_Interface :: Interface ->+                 T_Interface+sem_Interface (Interface _nt _cons _seg )  =+    (sem_Interface_Interface _nt _cons (sem_Segments _seg ) )+-- semantic domain+newtype T_Interface = T_Interface (CInterfaceMap ->+                                   Graph ->+                                   Info ->+                                   ([Vertex]) ->+                                   Vertex ->+                                   (Map Vertex ChildVisit) ->+                                   Graph ->+                                   ( (Seq (Vertex,ChildVisit)),(Seq Edge),([Vertex]),CInterface,(Seq Edge ),Nonterminal,Vertex,(Map Constructor CVisits)))+data Inh_Interface = Inh_Interface {allInters_Inh_Interface :: CInterfaceMap,ddp_Inh_Interface :: Graph,info_Inh_Interface :: Info,prev_Inh_Interface :: [Vertex],v_Inh_Interface :: Vertex,visitDescr_Inh_Interface :: Map Vertex ChildVisit,vssGraph_Inh_Interface :: Graph}+data Syn_Interface = Syn_Interface {descr_Syn_Interface :: Seq (Vertex,ChildVisit),edp_Syn_Interface :: Seq Edge,firstvisitvertices_Syn_Interface :: [Vertex],inter_Syn_Interface :: CInterface,newedges_Syn_Interface :: Seq Edge ,nt_Syn_Interface :: Nonterminal,v_Syn_Interface :: Vertex,visits_Syn_Interface :: Map Constructor CVisits}+wrap_Interface (T_Interface sem ) (Inh_Interface _lhsIallInters _lhsIddp _lhsIinfo _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )  =+    (let ( _lhsOdescr,_lhsOedp,_lhsOfirstvisitvertices,_lhsOinter,_lhsOnewedges,_lhsOnt,_lhsOv,_lhsOvisits) =+             (sem _lhsIallInters _lhsIddp _lhsIinfo _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )+     in  (Syn_Interface _lhsOdescr _lhsOedp _lhsOfirstvisitvertices _lhsOinter _lhsOnewedges _lhsOnt _lhsOv _lhsOvisits ))+sem_Interface_Interface :: Nonterminal ->+                           ([Constructor]) ->+                           T_Segments ->+                           T_Interface+sem_Interface_Interface nt_ cons_ (T_Segments seg_ )  =+    (T_Interface (\ _lhsIallInters+                    _lhsIddp+                    _lhsIinfo+                    _lhsIprev+                    _lhsIv+                    _lhsIvisitDescr+                    _lhsIvssGraph ->+                      (let _segOv :: Vertex+                           _lhsOv :: Vertex+                           _lhsOnewedges :: (Seq Edge )+                           _lhsOdescr :: (Seq (Vertex,ChildVisit))+                           _segOn :: Int+                           _segOcons :: ([Constructor])+                           _segOisFirst :: Bool+                           _segOfromLhs :: ([Vertex])+                           _lhsOnt :: Nonterminal+                           _lhsOinter :: CInterface+                           _lhsOvisits :: (Map Constructor CVisits)+                           _lhsOedp :: (Seq Edge)+                           _lhsOfirstvisitvertices :: ([Vertex])+                           _segOallInters :: CInterfaceMap+                           _segOddp :: Graph+                           _segOinfo :: Info+                           _segOprev :: ([Vertex])+                           _segOvisitDescr :: (Map Vertex ChildVisit)+                           _segOvssGraph :: Graph+                           _segIcvisits :: ([[CVisit]])+                           _segIdescr :: (Seq (Vertex,ChildVisit))+                           _segIedp :: (Seq Edge)+                           _segIfirstInh :: ([Vertex])+                           _segIgroups :: ([([Vertex],[Vertex])])+                           _segIhdIntravisits :: ([IntraVisit])+                           _segInewedges :: (Seq Edge )+                           _segInewvertices :: ([Vertex])+                           _segIprev :: ([Vertex])+                           _segIsegs :: CSegments+                           _segIv :: Vertex+                           -- "InterfacesRules.lag"(line 175, column 17)+                           _segOv =+                               _lhsIv+                           -- "InterfacesRules.lag"(line 176, column 17)+                           _v =+                               _segIv + length _segInewvertices+                           -- "InterfacesRules.lag"(line 177, column 17)+                           _lhsOv =+                               _v+                           -- "InterfacesRules.lag"(line 178, column 17)+                           _firstvisitvertices =+                               [_segIv .. _v-1]+                           -- "InterfacesRules.lag"(line 179, column 17)+                           _newedges =+                               zip _firstvisitvertices _segInewvertices+                           -- "InterfacesRules.lag"(line 180, column 17)+                           _lhsOnewedges =+                               _segInewedges Seq.<> Seq.fromList _newedges+                           -- "InterfacesRules.lag"(line 181, column 17)+                           _look =+                               \a -> ruleTable _lhsIinfo ! a+                           -- "InterfacesRules.lag"(line 182, column 17)+                           _descr =+                               zipWith (cv _look (-1)) _firstvisitvertices _segIgroups+                           -- "InterfacesRules.lag"(line 183, column 17)+                           _lhsOdescr =+                               _segIdescr Seq.<> Seq.fromList _descr+                           -- "InterfacesRules.lag"(line 191, column 16)+                           _segOn =+                               0+                           -- "InterfacesRules.lag"(line 223, column 16)+                           _segOcons =+                               cons_+                           -- "InterfacesRules.lag"(line 296, column 16)+                           _segOisFirst =+                               True+                           -- "InterfacesRules.lag"(line 333, column 16)+                           _segOfromLhs =+                               _lhsIprev+                           -- "InterfacesRules.lag"(line 373, column 16)+                           _lhsOnt =+                               nt_+                           -- "InterfacesRules.lag"(line 377, column 17)+                           _lhsOinter =+                               CInterface _segIsegs+                           -- "InterfacesRules.lag"(line 378, column 17)+                           _lhsOvisits =+                               Map.fromList (zip cons_ (transpose _segIcvisits))+                           -- use rule "InterfacesRules.lag"(line 417, column 54)+                           _lhsOedp =+                               _segIedp+                           -- use rule "InterfacesRules.lag"(line 244, column 70)+                           _lhsOfirstvisitvertices =+                               _firstvisitvertices+                           -- copy rule (down)+                           _segOallInters =+                               _lhsIallInters+                           -- copy rule (down)+                           _segOddp =+                               _lhsIddp+                           -- copy rule (down)+                           _segOinfo =+                               _lhsIinfo+                           -- copy rule (down)+                           _segOprev =+                               _lhsIprev+                           -- copy rule (down)+                           _segOvisitDescr =+                               _lhsIvisitDescr+                           -- copy rule (down)+                           _segOvssGraph =+                               _lhsIvssGraph+                           ( _segIcvisits,_segIdescr,_segIedp,_segIfirstInh,_segIgroups,_segIhdIntravisits,_segInewedges,_segInewvertices,_segIprev,_segIsegs,_segIv) =+                               (seg_ _segOallInters _segOcons _segOddp _segOfromLhs _segOinfo _segOisFirst _segOn _segOprev _segOv _segOvisitDescr _segOvssGraph )+                       in  ( _lhsOdescr,_lhsOedp,_lhsOfirstvisitvertices,_lhsOinter,_lhsOnewedges,_lhsOnt,_lhsOv,_lhsOvisits))) )+-- Interfaces --------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allInters            : CInterfaceMap+         ddp                  : Graph+         info                 : Info+         prev                 : [Vertex]+         visitDescr           : Map Vertex ChildVisit+         vssGraph             : Graph+      chained attribute:+         v                    : Vertex+      synthesized attributes:+         descr                : Seq (Vertex,ChildVisit)+         edp                  : Seq Edge+         firstvisitvertices   : [Vertex]+         inters               : CInterfaceMap+         newedges             : Seq Edge +         visits               : CVisitsMap+   alternatives:+      alternative Cons:+         child hd             : Interface+         child tl             : Interfaces+      alternative Nil:+-}+-- cata+sem_Interfaces :: Interfaces ->+                  T_Interfaces+sem_Interfaces list  =+    (Prelude.foldr sem_Interfaces_Cons sem_Interfaces_Nil (Prelude.map sem_Interface list) )+-- semantic domain+newtype T_Interfaces = T_Interfaces (CInterfaceMap ->+                                     Graph ->+                                     Info ->+                                     ([Vertex]) ->+                                     Vertex ->+                                     (Map Vertex ChildVisit) ->+                                     Graph ->+                                     ( (Seq (Vertex,ChildVisit)),(Seq Edge),([Vertex]),CInterfaceMap,(Seq Edge ),Vertex,CVisitsMap))+data Inh_Interfaces = Inh_Interfaces {allInters_Inh_Interfaces :: CInterfaceMap,ddp_Inh_Interfaces :: Graph,info_Inh_Interfaces :: Info,prev_Inh_Interfaces :: [Vertex],v_Inh_Interfaces :: Vertex,visitDescr_Inh_Interfaces :: Map Vertex ChildVisit,vssGraph_Inh_Interfaces :: Graph}+data Syn_Interfaces = Syn_Interfaces {descr_Syn_Interfaces :: Seq (Vertex,ChildVisit),edp_Syn_Interfaces :: Seq Edge,firstvisitvertices_Syn_Interfaces :: [Vertex],inters_Syn_Interfaces :: CInterfaceMap,newedges_Syn_Interfaces :: Seq Edge ,v_Syn_Interfaces :: Vertex,visits_Syn_Interfaces :: CVisitsMap}+wrap_Interfaces (T_Interfaces sem ) (Inh_Interfaces _lhsIallInters _lhsIddp _lhsIinfo _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )  =+    (let ( _lhsOdescr,_lhsOedp,_lhsOfirstvisitvertices,_lhsOinters,_lhsOnewedges,_lhsOv,_lhsOvisits) =+             (sem _lhsIallInters _lhsIddp _lhsIinfo _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )+     in  (Syn_Interfaces _lhsOdescr _lhsOedp _lhsOfirstvisitvertices _lhsOinters _lhsOnewedges _lhsOv _lhsOvisits ))+sem_Interfaces_Cons :: T_Interface ->+                       T_Interfaces ->+                       T_Interfaces+sem_Interfaces_Cons (T_Interface hd_ ) (T_Interfaces tl_ )  =+    (T_Interfaces (\ _lhsIallInters+                     _lhsIddp+                     _lhsIinfo+                     _lhsIprev+                     _lhsIv+                     _lhsIvisitDescr+                     _lhsIvssGraph ->+                       (let _lhsOinters :: CInterfaceMap+                            _lhsOvisits :: CVisitsMap+                            _lhsOdescr :: (Seq (Vertex,ChildVisit))+                            _lhsOedp :: (Seq Edge)+                            _lhsOfirstvisitvertices :: ([Vertex])+                            _lhsOnewedges :: (Seq Edge )+                            _lhsOv :: Vertex+                            _hdOallInters :: CInterfaceMap+                            _hdOddp :: Graph+                            _hdOinfo :: Info+                            _hdOprev :: ([Vertex])+                            _hdOv :: Vertex+                            _hdOvisitDescr :: (Map Vertex ChildVisit)+                            _hdOvssGraph :: Graph+                            _tlOallInters :: CInterfaceMap+                            _tlOddp :: Graph+                            _tlOinfo :: Info+                            _tlOprev :: ([Vertex])+                            _tlOv :: Vertex+                            _tlOvisitDescr :: (Map Vertex ChildVisit)+                            _tlOvssGraph :: Graph+                            _hdIdescr :: (Seq (Vertex,ChildVisit))+                            _hdIedp :: (Seq Edge)+                            _hdIfirstvisitvertices :: ([Vertex])+                            _hdIinter :: CInterface+                            _hdInewedges :: (Seq Edge )+                            _hdInt :: Nonterminal+                            _hdIv :: Vertex+                            _hdIvisits :: (Map Constructor CVisits)+                            _tlIdescr :: (Seq (Vertex,ChildVisit))+                            _tlIedp :: (Seq Edge)+                            _tlIfirstvisitvertices :: ([Vertex])+                            _tlIinters :: CInterfaceMap+                            _tlInewedges :: (Seq Edge )+                            _tlIv :: Vertex+                            _tlIvisits :: CVisitsMap+                            -- "InterfacesRules.lag"(line 367, column 12)+                            _lhsOinters =+                                Map.insert _hdInt _hdIinter _tlIinters+                            -- "InterfacesRules.lag"(line 368, column 12)+                            _lhsOvisits =+                                Map.insert _hdInt _hdIvisits _tlIvisits+                            -- use rule "InterfacesRules.lag"(line 118, column 20)+                            _lhsOdescr =+                                _hdIdescr Seq.<> _tlIdescr+                            -- use rule "InterfacesRules.lag"(line 417, column 54)+                            _lhsOedp =+                                _hdIedp Seq.<> _tlIedp+                            -- use rule "InterfacesRules.lag"(line 244, column 70)+                            _lhsOfirstvisitvertices =+                                _hdIfirstvisitvertices ++ _tlIfirstvisitvertices+                            -- use rule "InterfacesRules.lag"(line 117, column 23)+                            _lhsOnewedges =+                                _hdInewedges Seq.<> _tlInewedges+                            -- copy rule (up)+                            _lhsOv =+                                _tlIv+                            -- copy rule (down)+                            _hdOallInters =+                                _lhsIallInters+                            -- copy rule (down)+                            _hdOddp =+                                _lhsIddp+                            -- copy rule (down)+                            _hdOinfo =+                                _lhsIinfo+                            -- copy rule (down)+                            _hdOprev =+                                _lhsIprev+                            -- copy rule (down)+                            _hdOv =+                                _lhsIv+                            -- copy rule (down)+                            _hdOvisitDescr =+                                _lhsIvisitDescr+                            -- copy rule (down)+                            _hdOvssGraph =+                                _lhsIvssGraph+                            -- copy rule (down)+                            _tlOallInters =+                                _lhsIallInters+                            -- copy rule (down)+                            _tlOddp =+                                _lhsIddp+                            -- copy rule (down)+                            _tlOinfo =+                                _lhsIinfo+                            -- copy rule (down)+                            _tlOprev =+                                _lhsIprev+                            -- copy rule (chain)+                            _tlOv =+                                _hdIv+                            -- copy rule (down)+                            _tlOvisitDescr =+                                _lhsIvisitDescr+                            -- copy rule (down)+                            _tlOvssGraph =+                                _lhsIvssGraph+                            ( _hdIdescr,_hdIedp,_hdIfirstvisitvertices,_hdIinter,_hdInewedges,_hdInt,_hdIv,_hdIvisits) =+                                (hd_ _hdOallInters _hdOddp _hdOinfo _hdOprev _hdOv _hdOvisitDescr _hdOvssGraph )+                            ( _tlIdescr,_tlIedp,_tlIfirstvisitvertices,_tlIinters,_tlInewedges,_tlIv,_tlIvisits) =+                                (tl_ _tlOallInters _tlOddp _tlOinfo _tlOprev _tlOv _tlOvisitDescr _tlOvssGraph )+                        in  ( _lhsOdescr,_lhsOedp,_lhsOfirstvisitvertices,_lhsOinters,_lhsOnewedges,_lhsOv,_lhsOvisits))) )+sem_Interfaces_Nil :: T_Interfaces+sem_Interfaces_Nil  =+    (T_Interfaces (\ _lhsIallInters+                     _lhsIddp+                     _lhsIinfo+                     _lhsIprev+                     _lhsIv+                     _lhsIvisitDescr+                     _lhsIvssGraph ->+                       (let _lhsOinters :: CInterfaceMap+                            _lhsOvisits :: CVisitsMap+                            _lhsOdescr :: (Seq (Vertex,ChildVisit))+                            _lhsOedp :: (Seq Edge)+                            _lhsOfirstvisitvertices :: ([Vertex])+                            _lhsOnewedges :: (Seq Edge )+                            _lhsOv :: Vertex+                            -- "InterfacesRules.lag"(line 369, column 12)+                            _lhsOinters =+                                Map.empty+                            -- "InterfacesRules.lag"(line 370, column 12)+                            _lhsOvisits =+                                Map.empty+                            -- use rule "InterfacesRules.lag"(line 118, column 20)+                            _lhsOdescr =+                                Seq.empty+                            -- use rule "InterfacesRules.lag"(line 417, column 54)+                            _lhsOedp =+                                Seq.empty+                            -- use rule "InterfacesRules.lag"(line 244, column 70)+                            _lhsOfirstvisitvertices =+                                []+                            -- use rule "InterfacesRules.lag"(line 117, column 23)+                            _lhsOnewedges =+                                Seq.empty+                            -- copy rule (chain)+                            _lhsOv =+                                _lhsIv+                        in  ( _lhsOdescr,_lhsOedp,_lhsOfirstvisitvertices,_lhsOinters,_lhsOnewedges,_lhsOv,_lhsOvisits))) )+-- Segment -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allInters            : CInterfaceMap+         cons                 : [Constructor]+         ddp                  : Graph+         fromLhs              : [Vertex]+         info                 : Info+         isFirst              : Bool+         n                    : Int+         nextInh              : [Vertex]+         nextIntravisits      : [IntraVisit]+         nextNewvertices      : [Vertex]+         visitDescr           : Map Vertex ChildVisit+         vssGraph             : Graph+      chained attributes:+         prev                 : [Vertex]+         v                    : Vertex+      synthesized attributes:+         cvisits              : [CVisit]+         descr                : Seq (Vertex,ChildVisit)+         edp                  : Seq Edge+         groups               : [([Vertex],[Vertex])]+         inh                  : [Vertex]+         intravisits          : [IntraVisit]+         newedges             : Seq Edge +         newvertices          : [Vertex]+         seg                  : CSegment+         visitss              : [VisitSS]+   alternatives:+      alternative Segment:+         child inh            : {[Vertex]}+         child syn            : {[Vertex]}+         visit 0:+            local look        : _+            local occurAs     : _+            local groups      : _+            local v           : _+            local newvertices : _+            local attredges   : _+            local visitedges  : _+            local synOccur    : _+            local vss         : _+            local visitss'    : _+            local defined     : _+            local visitss     : _+            local fromLhs     : _+            local computed    : _+            local intravisits : _+            local iv          : _+            local _tup1       : _+            local inhmap      : _+            local synmap      : _+-}+-- cata+sem_Segment :: Segment ->+               T_Segment+sem_Segment (Segment _inh _syn )  =+    (sem_Segment_Segment _inh _syn )+-- semantic domain+newtype T_Segment = T_Segment (CInterfaceMap ->+                               ([Constructor]) ->+                               Graph ->+                               ([Vertex]) ->+                               Info ->+                               Bool ->+                               Int ->+                               ([Vertex]) ->+                               ([IntraVisit]) ->+                               ([Vertex]) ->+                               ([Vertex]) ->+                               Vertex ->+                               (Map Vertex ChildVisit) ->+                               Graph ->+                               ( ([CVisit]),(Seq (Vertex,ChildVisit)),(Seq Edge),([([Vertex],[Vertex])]),([Vertex]),([IntraVisit]),(Seq Edge ),([Vertex]),([Vertex]),CSegment,Vertex,([VisitSS])))+data Inh_Segment = Inh_Segment {allInters_Inh_Segment :: CInterfaceMap,cons_Inh_Segment :: [Constructor],ddp_Inh_Segment :: Graph,fromLhs_Inh_Segment :: [Vertex],info_Inh_Segment :: Info,isFirst_Inh_Segment :: Bool,n_Inh_Segment :: Int,nextInh_Inh_Segment :: [Vertex],nextIntravisits_Inh_Segment :: [IntraVisit],nextNewvertices_Inh_Segment :: [Vertex],prev_Inh_Segment :: [Vertex],v_Inh_Segment :: Vertex,visitDescr_Inh_Segment :: Map Vertex ChildVisit,vssGraph_Inh_Segment :: Graph}+data Syn_Segment = Syn_Segment {cvisits_Syn_Segment :: [CVisit],descr_Syn_Segment :: Seq (Vertex,ChildVisit),edp_Syn_Segment :: Seq Edge,groups_Syn_Segment :: [([Vertex],[Vertex])],inh_Syn_Segment :: [Vertex],intravisits_Syn_Segment :: [IntraVisit],newedges_Syn_Segment :: Seq Edge ,newvertices_Syn_Segment :: [Vertex],prev_Syn_Segment :: [Vertex],seg_Syn_Segment :: CSegment,v_Syn_Segment :: Vertex,visitss_Syn_Segment :: [VisitSS]}+wrap_Segment (T_Segment sem ) (Inh_Segment _lhsIallInters _lhsIcons _lhsIddp _lhsIfromLhs _lhsIinfo _lhsIisFirst _lhsIn _lhsInextInh _lhsInextIntravisits _lhsInextNewvertices _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )  =+    (let ( _lhsOcvisits,_lhsOdescr,_lhsOedp,_lhsOgroups,_lhsOinh,_lhsOintravisits,_lhsOnewedges,_lhsOnewvertices,_lhsOprev,_lhsOseg,_lhsOv,_lhsOvisitss) =+             (sem _lhsIallInters _lhsIcons _lhsIddp _lhsIfromLhs _lhsIinfo _lhsIisFirst _lhsIn _lhsInextInh _lhsInextIntravisits _lhsInextNewvertices _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )+     in  (Syn_Segment _lhsOcvisits _lhsOdescr _lhsOedp _lhsOgroups _lhsOinh _lhsOintravisits _lhsOnewedges _lhsOnewvertices _lhsOprev _lhsOseg _lhsOv _lhsOvisitss ))+sem_Segment_Segment :: ([Vertex]) ->+                       ([Vertex]) ->+                       T_Segment+sem_Segment_Segment inh_ syn_  =+    (T_Segment (\ _lhsIallInters+                  _lhsIcons+                  _lhsIddp+                  _lhsIfromLhs+                  _lhsIinfo+                  _lhsIisFirst+                  _lhsIn+                  _lhsInextInh+                  _lhsInextIntravisits+                  _lhsInextNewvertices+                  _lhsIprev+                  _lhsIv+                  _lhsIvisitDescr+                  _lhsIvssGraph ->+                    (let _lhsOdescr :: (Seq (Vertex,ChildVisit))+                         _lhsOnewedges :: (Seq Edge )+                         _lhsOprev :: ([Vertex])+                         _lhsOseg :: CSegment+                         _lhsOcvisits :: ([CVisit])+                         _lhsOedp :: (Seq Edge)+                         _lhsOinh :: ([Vertex])+                         _lhsOgroups :: ([([Vertex],[Vertex])])+                         _lhsOintravisits :: ([IntraVisit])+                         _lhsOnewvertices :: ([Vertex])+                         _lhsOv :: Vertex+                         _lhsOvisitss :: ([VisitSS])+                         -- "InterfacesRules.lag"(line 98, column 15)+                         _look =+                             \a -> ruleTable _lhsIinfo ! a+                         -- "InterfacesRules.lag"(line 99, column 15)+                         _occurAs =+                             \p us -> [ a  |  u <- us+                                           ,  a <- tdsToTdp _lhsIinfo ! u+                                           ,  p (_look a)]+                         -- "InterfacesRules.lag"(line 102, column 15)+                         _groups =+                             let group as = gather _lhsIinfo (_occurAs isRhs as)+                             in map (partition (isInh . _look)) (group (inh_ ++ syn_))+                         -- "InterfacesRules.lag"(line 104, column 15)+                         _v =+                             _lhsIv + length _groups+                         -- "InterfacesRules.lag"(line 105, column 15)+                         _newvertices =+                             [_lhsIv .. _v    -1]+                         -- "InterfacesRules.lag"(line 120, column 14)+                         _lhsOdescr =+                             Seq.fromList $ zipWith (cv _look _lhsIn) _newvertices _groups+                         -- "InterfacesRules.lag"(line 143, column 14)+                         _attredges =+                             concat (zipWith ed _newvertices _groups)+                         -- "InterfacesRules.lag"(line 162, column 15)+                         _visitedges =+                             zip _newvertices _lhsInextNewvertices+                         -- "InterfacesRules.lag"(line 163, column 15)+                         _lhsOnewedges =+                             Seq.fromList _attredges Seq.<> Seq.fromList _visitedges+                         -- "InterfacesRules.lag"(line 215, column 15)+                         _synOccur =+                             gather _lhsIinfo (_occurAs isLhs syn_)+                         -- "InterfacesRules.lag"(line 216, column 15)+                         _vss =+                             let hasCode v | inRange (bounds (ruleTable _lhsIinfo)) v =  getHasCode (ruleTable _lhsIinfo ! v)+                                           | otherwise = True+                             in if  null syn_+                                    then replicate (length _lhsIcons) []+                                    else map (filter hasCode . topSort' _lhsIvssGraph) _synOccur+                         -- "InterfacesRules.lag"(line 256, column 15)+                         _visitss' =+                             map (\\ _lhsIprev) _vss+                         -- "InterfacesRules.lag"(line 257, column 15)+                         _defined =+                             let defines v = case Map.lookup v _lhsIvisitDescr of+                                               Nothing -> [v]+                                               Just (ChildVisit _ _ _ inh _) -> v:inh+                             in concatMap (concatMap defines) _visitss+                         -- "InterfacesRules.lag"(line 261, column 15)+                         _lhsOprev =+                             _lhsIprev ++ _defined+                         -- "InterfacesRules.lag"(line 269, column 15)+                         _visitss =+                             let  rem :: [(Name,Name,Maybe Type)] -> [Vertex] -> [Vertex]+                                  rem prev [] = []+                                  rem prev (v:vs)+                                    | inRange (bounds table) v+                                        = let  cr = table ! v+                                               addV = if  (getField cr,getAttr cr,getType cr) `elem` prev+                                                          then id+                                                          else (v:)+                                               def = Map.elems (getDefines cr)+                                          in addV (rem (def ++ prev) vs)+                                    | otherwise = v:rem prev vs+                                  table = ruleTable _lhsIinfo+                             in map (rem []) _visitss'+                         -- "InterfacesRules.lag"(line 338, column 15)+                         _fromLhs =+                             _occurAs isLhs inh_ ++ _lhsIfromLhs+                         -- "InterfacesRules.lag"(line 339, column 15)+                         _computed =+                             let computes v = case Map.lookup v _lhsIvisitDescr of+                                                Nothing -> Map.keys (getDefines (ruleTable _lhsIinfo ! v))+                                                Just (ChildVisit _ _ _ _ syn) -> v:syn+                             in concatMap (concatMap computes) _visitss+                         -- "InterfacesRules.lag"(line 343, column 15)+                         _intravisits =+                             zipWith _iv _visitss _lhsInextIntravisits+                         -- "InterfacesRules.lag"(line 344, column 15)+                         _iv =+                             \vs next ->+                               let needed = concatMap (_lhsIddp !) vs+                               in nub (needed ++ next) \\ (_fromLhs ++ _computed)+                         -- "InterfacesRules.lag"(line 387, column 15)+                         _lhsOseg =+                             if False then undefined _lhsIvssGraph _lhsIvisitDescr _lhsIprev else CSegment _inhmap _synmap+                         -- "InterfacesRules.lag"(line 389, column 19)+                         __tup1 =+                             let makemap = Map.fromList . map findType+                                 findType v = getNtaNameType (attrTable _lhsIinfo ! v)+                             in (makemap inh_,makemap syn_)+                         -- "InterfacesRules.lag"(line 389, column 19)+                         (_inhmap,_) =+                             __tup1+                         -- "InterfacesRules.lag"(line 389, column 19)+                         (_,_synmap) =+                             __tup1+                         -- "InterfacesRules.lag"(line 392, column 15)+                         _lhsOcvisits =+                             let  mkVisit vss intra = CVisit _inhmap _synmap (mkSequence vss) (mkSequence intra) True+                                  mkSequence = map mkRule+                                  mkRule v = case Map.lookup v _lhsIvisitDescr of+                                               Nothing -> ruleTable _lhsIinfo ! v+                                               Just (ChildVisit name nt n _ _) -> ccv name nt n _lhsIallInters+                             in zipWith mkVisit _visitss _intravisits+                         -- "InterfacesRules.lag"(line 419, column 14)+                         _lhsOedp =+                             Seq.fromList [(i,s) | i <- inh_, s <- syn_]+                             Seq.<> Seq.fromList [(s,i) | s <- syn_, i <- _lhsInextInh ]+                         -- "InterfacesRules.lag"(line 424, column 14)+                         _lhsOinh =+                             inh_+                         -- copy rule (from local)+                         _lhsOgroups =+                             _groups+                         -- copy rule (from local)+                         _lhsOintravisits =+                             _intravisits+                         -- copy rule (from local)+                         _lhsOnewvertices =+                             _newvertices+                         -- copy rule (from local)+                         _lhsOv =+                             _v+                         -- copy rule (from local)+                         _lhsOvisitss =+                             _visitss+                     in  ( _lhsOcvisits,_lhsOdescr,_lhsOedp,_lhsOgroups,_lhsOinh,_lhsOintravisits,_lhsOnewedges,_lhsOnewvertices,_lhsOprev,_lhsOseg,_lhsOv,_lhsOvisitss))) )+-- Segments ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allInters            : CInterfaceMap+         cons                 : [Constructor]+         ddp                  : Graph+         fromLhs              : [Vertex]+         info                 : Info+         isFirst              : Bool+         n                    : Int+         visitDescr           : Map Vertex ChildVisit+         vssGraph             : Graph+      chained attributes:+         prev                 : [Vertex]+         v                    : Vertex+      synthesized attributes:+         cvisits              : [[CVisit]]+         descr                : Seq (Vertex,ChildVisit)+         edp                  : Seq Edge+         firstInh             : [Vertex]+         groups               : [([Vertex],[Vertex])]+         hdIntravisits        : [IntraVisit]+         newedges             : Seq Edge +         newvertices          : [Vertex]+         segs                 : CSegments+   alternatives:+      alternative Cons:+         child hd             : Segment+         child tl             : Segments+      alternative Nil:+-}+-- cata+sem_Segments :: Segments ->+                T_Segments+sem_Segments list  =+    (Prelude.foldr sem_Segments_Cons sem_Segments_Nil (Prelude.map sem_Segment list) )+-- semantic domain+newtype T_Segments = T_Segments (CInterfaceMap ->+                                 ([Constructor]) ->+                                 Graph ->+                                 ([Vertex]) ->+                                 Info ->+                                 Bool ->+                                 Int ->+                                 ([Vertex]) ->+                                 Vertex ->+                                 (Map Vertex ChildVisit) ->+                                 Graph ->+                                 ( ([[CVisit]]),(Seq (Vertex,ChildVisit)),(Seq Edge),([Vertex]),([([Vertex],[Vertex])]),([IntraVisit]),(Seq Edge ),([Vertex]),([Vertex]),CSegments,Vertex))+data Inh_Segments = Inh_Segments {allInters_Inh_Segments :: CInterfaceMap,cons_Inh_Segments :: [Constructor],ddp_Inh_Segments :: Graph,fromLhs_Inh_Segments :: [Vertex],info_Inh_Segments :: Info,isFirst_Inh_Segments :: Bool,n_Inh_Segments :: Int,prev_Inh_Segments :: [Vertex],v_Inh_Segments :: Vertex,visitDescr_Inh_Segments :: Map Vertex ChildVisit,vssGraph_Inh_Segments :: Graph}+data Syn_Segments = Syn_Segments {cvisits_Syn_Segments :: [[CVisit]],descr_Syn_Segments :: Seq (Vertex,ChildVisit),edp_Syn_Segments :: Seq Edge,firstInh_Syn_Segments :: [Vertex],groups_Syn_Segments :: [([Vertex],[Vertex])],hdIntravisits_Syn_Segments :: [IntraVisit],newedges_Syn_Segments :: Seq Edge ,newvertices_Syn_Segments :: [Vertex],prev_Syn_Segments :: [Vertex],segs_Syn_Segments :: CSegments,v_Syn_Segments :: Vertex}+wrap_Segments (T_Segments sem ) (Inh_Segments _lhsIallInters _lhsIcons _lhsIddp _lhsIfromLhs _lhsIinfo _lhsIisFirst _lhsIn _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )  =+    (let ( _lhsOcvisits,_lhsOdescr,_lhsOedp,_lhsOfirstInh,_lhsOgroups,_lhsOhdIntravisits,_lhsOnewedges,_lhsOnewvertices,_lhsOprev,_lhsOsegs,_lhsOv) =+             (sem _lhsIallInters _lhsIcons _lhsIddp _lhsIfromLhs _lhsIinfo _lhsIisFirst _lhsIn _lhsIprev _lhsIv _lhsIvisitDescr _lhsIvssGraph )+     in  (Syn_Segments _lhsOcvisits _lhsOdescr _lhsOedp _lhsOfirstInh _lhsOgroups _lhsOhdIntravisits _lhsOnewedges _lhsOnewvertices _lhsOprev _lhsOsegs _lhsOv ))+sem_Segments_Cons :: T_Segment ->+                     T_Segments ->+                     T_Segments+sem_Segments_Cons (T_Segment hd_ ) (T_Segments tl_ )  =+    (T_Segments (\ _lhsIallInters+                   _lhsIcons+                   _lhsIddp+                   _lhsIfromLhs+                   _lhsIinfo+                   _lhsIisFirst+                   _lhsIn+                   _lhsIprev+                   _lhsIv+                   _lhsIvisitDescr+                   _lhsIvssGraph ->+                     (let _hdOnextNewvertices :: ([Vertex])+                          _lhsOnewvertices :: ([Vertex])+                          _lhsOgroups :: ([([Vertex],[Vertex])])+                          _tlOn :: Int+                          _tlOisFirst :: Bool+                          _hdOnextIntravisits :: ([IntraVisit])+                          _lhsOhdIntravisits :: ([IntraVisit])+                          _hdOfromLhs :: ([Vertex])+                          _tlOfromLhs :: ([Vertex])+                          _lhsOsegs :: CSegments+                          _hdOnextInh :: ([Vertex])+                          _lhsOfirstInh :: ([Vertex])+                          _lhsOcvisits :: ([[CVisit]])+                          _lhsOdescr :: (Seq (Vertex,ChildVisit))+                          _lhsOedp :: (Seq Edge)+                          _lhsOnewedges :: (Seq Edge )+                          _lhsOprev :: ([Vertex])+                          _lhsOv :: Vertex+                          _hdOallInters :: CInterfaceMap+                          _hdOcons :: ([Constructor])+                          _hdOddp :: Graph+                          _hdOinfo :: Info+                          _hdOisFirst :: Bool+                          _hdOn :: Int+                          _hdOprev :: ([Vertex])+                          _hdOv :: Vertex+                          _hdOvisitDescr :: (Map Vertex ChildVisit)+                          _hdOvssGraph :: Graph+                          _tlOallInters :: CInterfaceMap+                          _tlOcons :: ([Constructor])+                          _tlOddp :: Graph+                          _tlOinfo :: Info+                          _tlOprev :: ([Vertex])+                          _tlOv :: Vertex+                          _tlOvisitDescr :: (Map Vertex ChildVisit)+                          _tlOvssGraph :: Graph+                          _hdIcvisits :: ([CVisit])+                          _hdIdescr :: (Seq (Vertex,ChildVisit))+                          _hdIedp :: (Seq Edge)+                          _hdIgroups :: ([([Vertex],[Vertex])])+                          _hdIinh :: ([Vertex])+                          _hdIintravisits :: ([IntraVisit])+                          _hdInewedges :: (Seq Edge )+                          _hdInewvertices :: ([Vertex])+                          _hdIprev :: ([Vertex])+                          _hdIseg :: CSegment+                          _hdIv :: Vertex+                          _hdIvisitss :: ([VisitSS])+                          _tlIcvisits :: ([[CVisit]])+                          _tlIdescr :: (Seq (Vertex,ChildVisit))+                          _tlIedp :: (Seq Edge)+                          _tlIfirstInh :: ([Vertex])+                          _tlIgroups :: ([([Vertex],[Vertex])])+                          _tlIhdIntravisits :: ([IntraVisit])+                          _tlInewedges :: (Seq Edge )+                          _tlInewvertices :: ([Vertex])+                          _tlIprev :: ([Vertex])+                          _tlIsegs :: CSegments+                          _tlIv :: Vertex+                          -- "InterfacesRules.lag"(line 157, column 12)+                          _hdOnextNewvertices =+                              _tlInewvertices+                          -- "InterfacesRules.lag"(line 158, column 12)+                          _lhsOnewvertices =+                              _hdInewvertices+                          -- "InterfacesRules.lag"(line 172, column 11)+                          _lhsOgroups =+                              _hdIgroups+                          -- "InterfacesRules.lag"(line 193, column 11)+                          _tlOn =+                              _lhsIn + 1+                          -- "InterfacesRules.lag"(line 298, column 11)+                          _tlOisFirst =+                              False+                          -- "InterfacesRules.lag"(line 311, column 12)+                          _hdOnextIntravisits =+                              _tlIhdIntravisits+                          -- "InterfacesRules.lag"(line 312, column 12)+                          _lhsOhdIntravisits =+                              _hdIintravisits+                          -- "InterfacesRules.lag"(line 335, column 12)+                          _hdOfromLhs =+                              _lhsIfromLhs+                          -- "InterfacesRules.lag"(line 336, column 12)+                          _tlOfromLhs =+                              []+                          -- "InterfacesRules.lag"(line 382, column 12)+                          _lhsOsegs =+                              _hdIseg : _tlIsegs+                          -- "InterfacesRules.lag"(line 426, column 12)+                          _hdOnextInh =+                              _tlIfirstInh+                          -- "InterfacesRules.lag"(line 427, column 12)+                          _lhsOfirstInh =+                              _hdIinh+                          -- use rule "InterfacesRules.lag"(line 381, column 29)+                          _lhsOcvisits =+                              _hdIcvisits : _tlIcvisits+                          -- use rule "InterfacesRules.lag"(line 118, column 20)+                          _lhsOdescr =+                              _hdIdescr Seq.<> _tlIdescr+                          -- use rule "InterfacesRules.lag"(line 417, column 54)+                          _lhsOedp =+                              _hdIedp Seq.<> _tlIedp+                          -- use rule "InterfacesRules.lag"(line 117, column 23)+                          _lhsOnewedges =+                              _hdInewedges Seq.<> _tlInewedges+                          -- copy rule (up)+                          _lhsOprev =+                              _tlIprev+                          -- copy rule (up)+                          _lhsOv =+                              _tlIv+                          -- copy rule (down)+                          _hdOallInters =+                              _lhsIallInters+                          -- copy rule (down)+                          _hdOcons =+                              _lhsIcons+                          -- copy rule (down)+                          _hdOddp =+                              _lhsIddp+                          -- copy rule (down)+                          _hdOinfo =+                              _lhsIinfo+                          -- copy rule (down)+                          _hdOisFirst =+                              _lhsIisFirst+                          -- copy rule (down)+                          _hdOn =+                              _lhsIn+                          -- copy rule (down)+                          _hdOprev =+                              _lhsIprev+                          -- copy rule (down)+                          _hdOv =+                              _lhsIv+                          -- copy rule (down)+                          _hdOvisitDescr =+                              _lhsIvisitDescr+                          -- copy rule (down)+                          _hdOvssGraph =+                              _lhsIvssGraph+                          -- copy rule (down)+                          _tlOallInters =+                              _lhsIallInters+                          -- copy rule (down)+                          _tlOcons =+                              _lhsIcons+                          -- copy rule (down)+                          _tlOddp =+                              _lhsIddp+                          -- copy rule (down)+                          _tlOinfo =+                              _lhsIinfo+                          -- copy rule (chain)+                          _tlOprev =+                              _hdIprev+                          -- copy rule (chain)+                          _tlOv =+                              _hdIv+                          -- copy rule (down)+                          _tlOvisitDescr =+                              _lhsIvisitDescr+                          -- copy rule (down)+                          _tlOvssGraph =+                              _lhsIvssGraph+                          ( _hdIcvisits,_hdIdescr,_hdIedp,_hdIgroups,_hdIinh,_hdIintravisits,_hdInewedges,_hdInewvertices,_hdIprev,_hdIseg,_hdIv,_hdIvisitss) =+                              (hd_ _hdOallInters _hdOcons _hdOddp _hdOfromLhs _hdOinfo _hdOisFirst _hdOn _hdOnextInh _hdOnextIntravisits _hdOnextNewvertices _hdOprev _hdOv _hdOvisitDescr _hdOvssGraph )+                          ( _tlIcvisits,_tlIdescr,_tlIedp,_tlIfirstInh,_tlIgroups,_tlIhdIntravisits,_tlInewedges,_tlInewvertices,_tlIprev,_tlIsegs,_tlIv) =+                              (tl_ _tlOallInters _tlOcons _tlOddp _tlOfromLhs _tlOinfo _tlOisFirst _tlOn _tlOprev _tlOv _tlOvisitDescr _tlOvssGraph )+                      in  ( _lhsOcvisits,_lhsOdescr,_lhsOedp,_lhsOfirstInh,_lhsOgroups,_lhsOhdIntravisits,_lhsOnewedges,_lhsOnewvertices,_lhsOprev,_lhsOsegs,_lhsOv))) )+sem_Segments_Nil :: T_Segments+sem_Segments_Nil  =+    (T_Segments (\ _lhsIallInters+                   _lhsIcons+                   _lhsIddp+                   _lhsIfromLhs+                   _lhsIinfo+                   _lhsIisFirst+                   _lhsIn+                   _lhsIprev+                   _lhsIv+                   _lhsIvisitDescr+                   _lhsIvssGraph ->+                     (let _lhsOnewvertices :: ([Vertex])+                          _lhsOgroups :: ([([Vertex],[Vertex])])+                          _lhsOhdIntravisits :: ([IntraVisit])+                          _lhsOsegs :: CSegments+                          _lhsOfirstInh :: ([Vertex])+                          _lhsOcvisits :: ([[CVisit]])+                          _lhsOdescr :: (Seq (Vertex,ChildVisit))+                          _lhsOedp :: (Seq Edge)+                          _lhsOnewedges :: (Seq Edge )+                          _lhsOprev :: ([Vertex])+                          _lhsOv :: Vertex+                          -- "InterfacesRules.lag"(line 159, column 12)+                          _lhsOnewvertices =+                              []+                          -- "InterfacesRules.lag"(line 173, column 11)+                          _lhsOgroups =+                              []+                          -- "InterfacesRules.lag"(line 313, column 10)+                          _lhsOhdIntravisits =+                              repeat []+                          -- "InterfacesRules.lag"(line 383, column 12)+                          _lhsOsegs =+                              []+                          -- "InterfacesRules.lag"(line 428, column 11)+                          _lhsOfirstInh =+                              []+                          -- use rule "InterfacesRules.lag"(line 381, column 29)+                          _lhsOcvisits =+                              []+                          -- use rule "InterfacesRules.lag"(line 118, column 20)+                          _lhsOdescr =+                              Seq.empty+                          -- use rule "InterfacesRules.lag"(line 417, column 54)+                          _lhsOedp =+                              Seq.empty+                          -- use rule "InterfacesRules.lag"(line 117, column 23)+                          _lhsOnewedges =+                              Seq.empty+                          -- copy rule (chain)+                          _lhsOprev =+                              _lhsIprev+                          -- copy rule (chain)+                          _lhsOv =+                              _lhsIv+                      in  ( _lhsOcvisits,_lhsOdescr,_lhsOedp,_lhsOfirstInh,_lhsOgroups,_lhsOhdIntravisits,_lhsOnewedges,_lhsOnewvertices,_lhsOprev,_lhsOsegs,_lhsOv))) )
+ src-derived/Order.hs view
@@ -0,0 +1,3399 @@++-- UUAGC 0.9.5 (Order.ag)+module Order where++-- From uuagc+import CommonTypes+import Patterns+import ErrorMessages+import AbstractSyntax+import Code hiding (Type)+import qualified Code+import Expression+import Options+import SequentialComputation+import SequentialTypes+import CodeSyntax+import GrammarInfo+import HsToken(HsTokensRoot(HsTokensRoot))+import HsTokenScanner(lexTokens)+import SemHsTokens(sem_HsTokensRoot,wrap_HsTokensRoot, Syn_HsTokensRoot(..),Inh_HsTokensRoot(..))+-- From uulib+import qualified Data.Map as Map+import qualified Data.Set as Set+import qualified UU.DData.Seq as Seq+import Data.Map(Map) +import Data.Set(Set)+import UU.DData.Seq(Seq, (<>)) +import UU.Util.Utils+import UU.Scanner.Position(Pos(..),initPos)++-- From haskell libraries+import Control.Monad(liftM)+import qualified Data.Array as Array+import Data.Array((!),bounds,inRange)+import Data.List(elemIndex,partition,sort,mapAccumL,find,nubBy,intersperse,groupBy,transpose)+import qualified Data.Tree as Tree+import Maybe++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)++import UU.Scanner.Position(Pos)++-- AbstractSyntax.ag imports+import Data.Set(Set)+import Data.Map(Map)+import Patterns    (Pattern(..),Patterns)+import Expression  (Expression(..))+import CommonTypes++-- Terminates with an error if the key is not in the map+findWithErr1 :: (Ord k, Show k) => String -> k -> Map k a -> a+findWithErr1 s k+  = Map.findWithDefault (error ("findWithErr1 " ++ s ++ ": key " ++ show k ++ " not in map.")) k++findWithErr2 :: (Ord k, Show k, Show a) => k -> Map k a -> a+findWithErr2 k m+  = Map.findWithDefault (error ("findWithErr2: key " ++ show k ++ " not in map: " ++ show m)) k m++getNtName :: Type -> Nonterminal+getNtName (NT nt) = nt+getNtName _       = nullIdent++data AltAttr = AltAttr Name Name Bool +               deriving (Eq, Ord, Show)++substSelf nt tp = if tp==NT _SELF +                  then Haskell (getName nt)+                  else tp+	+haskellTupel :: [Type] -> Maybe Type+haskellTupel ts =  Just ( Haskell ( '(' : (concat (intersperse "," (map show ts))) ++ ")" ))++lookupVertices :: Identifier -> Identifier -> Map AltAttr Int -> [Int]+lookupVertices fld nm attrs+  = catMaybes (  [Map.lookup (AltAttr fld nm True) attrs]+              ++ [Map.lookup (AltAttr fld nm False) attrs]+              )++swap (a,b) = (b,a)++showPath :: Table CRule -> [Vertex] -> [String]+showPath ruleTable path+  =  let  look a | inRange (bounds ruleTable) a = [showOrigin (ruleTable ! a)]+                 | otherwise = ["Vertex " ++ show a]+          showOrigin cr  | getHasCode cr && getName (getAttr cr) /= "self" = prettyCRule cr ++ " (" ++ show (getPos (getAttr cr)) ++ ")"+                         | otherwise = prettyCRule cr+     in concatMap look path+++showPathLocal :: Table CRule -> [Vertex] -> [String]+showPathLocal _ [] = []+showPathLocal ruleTable xs = showP (xs++[-1])+ where showP []         = []+       showP (v1:v2:vs) = let line  = step v1 v2+                              lines = showP vs+                          in  line:lines+       step v1 v2  = " - " ++ a1+        where r1 = ruleTable ! v1+              a1 = show (getAttr  r1)+++limitTo :: Int -> [String] -> [String]+limitTo _ [] = [] +limitTo 0 _ = ["....etcetera, etcetera...."]+limitTo n (x:xs) = x : limitTo (n-1) xs++showPathNice :: Table CRule -> [Vertex] -> [String]+showPathNice _ [] = []+showPathNice ruleTable xs = limitTo 100 (showP ((-1):xs++[-1]))+ where [maxf, maxa, maxn, maxc] = maxWidths ruleTable (take 100 xs)+       showP []         = []+       showP (v1:v2:vs) = let line  = step v1 v2+                              lines = showP vs+                          in  if null line  then lines  else line:lines+       step v1 v2  |  last &&      first    = induced+                   |  last &&     isSyn r1  = "pass up        "  ++ alignR maxf ""    ++ " " ++ alignL maxa a1 ++ " in " ++ alignR maxn n1 ++ "|" ++ c1 ++ induced+                   |  first&& not(isSyn r2) = "get from above "  ++ alignR maxf ""    ++ " " ++ alignL maxa a2 ++ " in " ++ alignR maxn n2 ++ "|" ++ c2+                   |  last                  = "pass down      "  ++ alignR maxf f1    ++ "." ++ a1                                                      ++ induced+                   |              isSyn r2  = "get from below "  ++ alignR maxf f2    ++ "." ++ alignL maxa a2 ++ " in " ++ alignR maxn n2 ++ "|" ++ c2+                   |  isLocal r1  = if head a1 == '_' +                                         then ""+                                         else "calculate      "  ++ alignR maxf "loc" ++ "." ++ a1+                   |  otherwise             = "pass down      "  ++ alignR maxf f1    ++ "." ++ alignL maxa a1 ++ " to " ++ alignR maxn n2 ++ "|" ++ c2+          where+              first = v1<0+              last  = v2<0+              r1 = ruleTable ! v1+              r2 = ruleTable ! v2+              a1 = show (getAttr  r1)+              a2 = show (getAttr  r2)+              f1 = show (getField r1)+              f2 = show (getField r2)+              n1 = show (getLhsNt r1)+              n2 = show (getLhsNt r2)+              c1 = show (getCon   r1)+              c2 = show (getCon   r2)+              induced | v2== -2   =  " INDUCED dependency to "+                      | otherwise = ""+++maxWidths ruleTable vs+  = map maximum (transpose (map getWidth vs))+  where getWidth v | v<0       = [0,0,0,0]+                   | otherwise = map (length . show . ($ (ruleTable!v))) [getField, getAttr, getLhsNt, getCon]++alignL n xs | k<n       = xs ++ replicate (n-k) ' '+            | otherwise = xs+              where k = length xs++alignR n xs | k<n       = replicate (n-k) ' ' ++ xs+            | otherwise = xs+              where k = length xs++localCycleErr :: Table CRule -> Bool -> Route -> Error+localCycleErr ruleTable o_visit (s:path)+  =  let cr = ruleTable ! s+         attr = getAttr cr+         nt = getLhsNt cr+         con = getCon cr+     in LocalCirc nt con attr o_visit (showPathLocal ruleTable path)++instCycleErr :: Table CRule -> Bool -> Route -> Error+instCycleErr ruleTable o_visit (s:path)+  =  let cr = ruleTable ! s+         attr = getAttr cr+         nt = getLhsNt cr+         con = getCon cr+     in InstCirc nt con attr o_visit (showPathLocal ruleTable path)++directCycleErrs :: Table NTAttr -> Table CRule -> Bool -> [EdgeRoutes] -> [Error]+directCycleErrs attrTable ruleTable o_visit xs+  = let getNont v = case attrTable ! v of+                      NTASyn nt _ _ -> nt+                      NTAInh nt _ _ -> nt+        getAttr v = case attrTable ! v of+                      NTASyn _ a _  -> a+                      NTAInh _ a _  -> a+        sameNont ((v1,_),_,_) ((v2,_),_,_) =  getNont v1 == getNont v2+        procCycle ((v1,v2),p1,p2) = ((getAttr v1, getAttr v2), showPathNice ruleTable p1, showPathNice ruleTable p2)+        wrapGroup gr@(((v1,_),_,_):_) = DirectCirc (getNont v1) o_visit (map procCycle gr)+    in  map wrapGroup (groupBy sameNont xs)++inducedCycleErrs :: Table NTAttr -> Table CRule -> CInterfaceMap -> [EdgeRoutes] -> [Error]+inducedCycleErrs attrTable ruleTable cim xs+  = let getNont v = case attrTable ! v of+                      NTASyn nt _ _ -> nt+                      NTAInh nt _ _ -> nt+        getAttr v = case attrTable ! v of+                      NTASyn _ a _  -> a+                      NTAInh _ a _  -> a+        sameNont ((v1,_),_,_) ((v2,_),_,_) =  getNont v1 == getNont v2+        procCycle ((v1,v2),p1,p2) = ((getAttr v1, getAttr v2), showPathNice ruleTable p1, showPathNice ruleTable p2)+        wrapGroup gr@(((v1,_),_,_):_) = InducedCirc (getNont v1) (findWithErr1 "inducedCycleErr.cinter" (getNont v1) cim) (map procCycle gr)+    in  map wrapGroup (groupBy sameNont xs)+-- Alternative -------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allnts               : [Name]+         cVisitsMap           : CVisitsMap+         inh                  : Attributes+         manualAttrDepMap     : AttrOrderMap+         nt                   : Identifier+         o_case               : Bool+         o_cata               : Bool+         o_dovisit            : Bool+         o_newtypes           : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_unbox              : Bool+         o_wantvisit          : Bool+         prefix               : String+         syn                  : Attributes+      chained attribute:+         vcount               : Int+      synthesized attributes:+         additionalDep        : Seq Edge+         cAlternative         : CAlternative+         cons                 : [Constructor]+         directDep            : Seq Edge+         errors               : Seq Error+         instDep              : Seq Edge+         rules                : Seq (Vertex,CRule)+   alternatives:+      alternative Alternative:+         child con            : {Constructor}+         child children       : Children+         child rules          : Rules+         child typeSigs       : TypeSigs+         visit 0:+            local gathAltAttrs : _+            local inhRules    : _+            local gathRules   : _+            local cVisits     : _+            local allfields   : _+            local attrs       : _+            local inhnames    : _+            local synnames    : _+-}+-- cata+sem_Alternative :: Alternative ->+                   T_Alternative+sem_Alternative (Alternative _con _children _rules _typeSigs )  =+    (sem_Alternative_Alternative _con (sem_Children _children ) (sem_Rules _rules ) (sem_TypeSigs _typeSigs ) )+-- semantic domain+newtype T_Alternative = T_Alternative (([Name]) ->+                                       CVisitsMap ->+                                       Attributes ->+                                       AttrOrderMap ->+                                       Identifier ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       String ->+                                       Attributes ->+                                       Int ->+                                       ( (Seq Edge),CAlternative,([Constructor]),(Seq Edge),(Seq Error),(Seq Edge),(Seq (Vertex,CRule)),Int))+data Inh_Alternative = Inh_Alternative {allnts_Inh_Alternative :: [Name],cVisitsMap_Inh_Alternative :: CVisitsMap,inh_Inh_Alternative :: Attributes,manualAttrDepMap_Inh_Alternative :: AttrOrderMap,nt_Inh_Alternative :: Identifier,o_case_Inh_Alternative :: Bool,o_cata_Inh_Alternative :: Bool,o_dovisit_Inh_Alternative :: Bool,o_newtypes_Inh_Alternative :: Bool,o_rename_Inh_Alternative :: Bool,o_sem_Inh_Alternative :: Bool,o_sig_Inh_Alternative :: Bool,o_unbox_Inh_Alternative :: Bool,o_wantvisit_Inh_Alternative :: Bool,prefix_Inh_Alternative :: String,syn_Inh_Alternative :: Attributes,vcount_Inh_Alternative :: Int}+data Syn_Alternative = Syn_Alternative {additionalDep_Syn_Alternative :: Seq Edge,cAlternative_Syn_Alternative :: CAlternative,cons_Syn_Alternative :: [Constructor],directDep_Syn_Alternative :: Seq Edge,errors_Syn_Alternative :: Seq Error,instDep_Syn_Alternative :: Seq Edge,rules_Syn_Alternative :: Seq (Vertex,CRule),vcount_Syn_Alternative :: Int}+wrap_Alternative (T_Alternative sem ) (Inh_Alternative _lhsIallnts _lhsIcVisitsMap _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIvcount )  =+    (let ( _lhsOadditionalDep,_lhsOcAlternative,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOrules,_lhsOvcount) =+             (sem _lhsIallnts _lhsIcVisitsMap _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIvcount )+     in  (Syn_Alternative _lhsOadditionalDep _lhsOcAlternative _lhsOcons _lhsOdirectDep _lhsOerrors _lhsOinstDep _lhsOrules _lhsOvcount ))+sem_Alternative_Alternative :: Constructor ->+                               T_Children ->+                               T_Rules ->+                               T_TypeSigs ->+                               T_Alternative+sem_Alternative_Alternative con_ (T_Children children_ ) (T_Rules rules_ ) (T_TypeSigs typeSigs_ )  =+    (T_Alternative (\ _lhsIallnts+                      _lhsIcVisitsMap+                      _lhsIinh+                      _lhsImanualAttrDepMap+                      _lhsInt+                      _lhsIo_case+                      _lhsIo_cata+                      _lhsIo_dovisit+                      _lhsIo_newtypes+                      _lhsIo_rename+                      _lhsIo_sem+                      _lhsIo_sig+                      _lhsIo_unbox+                      _lhsIo_wantvisit+                      _lhsIprefix+                      _lhsIsyn+                      _lhsIvcount ->+                        (let _childrenOcon :: Identifier+                             _rulesOcon :: Identifier+                             _rulesOaltAttrs :: (Map AltAttr Vertex)+                             _rulesOchildNts :: (Map Name Nonterminal)+                             _rulesOchildInhs :: (Map Name Attributes)+                             _lhsOrules :: (Seq (Vertex,CRule))+                             _lhsOvcount :: Int+                             _rulesOsynsOfChildren :: (Map Name Attributes)+                             _lhsOcons :: ([Constructor])+                             _typeSigsOtypeSigs :: (Map Name Type)+                             _rulesOallTypeSigs :: (Map Name Type)+                             _lhsOcAlternative :: CAlternative+                             _lhsOadditionalDep :: (Seq Edge)+                             _lhsOdirectDep :: (Seq Edge)+                             _lhsOerrors :: (Seq Error)+                             _lhsOinstDep :: (Seq Edge)+                             _childrenOallfields :: ([(Name,Type,Bool)])+                             _childrenOallnts :: ([Name])+                             _childrenOattrs :: ([(Name,Name)])+                             _childrenOinh :: Attributes+                             _childrenOnt :: Identifier+                             _childrenOo_unbox :: Bool+                             _childrenOsyn :: Attributes+                             _rulesOallfields :: ([(Name,Type,Bool)])+                             _rulesOallnts :: ([Name])+                             _rulesOattrs :: ([(Name,Name)])+                             _rulesOinh :: Attributes+                             _rulesOmanualAttrDepMap :: AttrOrderMap+                             _rulesOnt :: Identifier+                             _rulesOo_case :: Bool+                             _rulesOo_cata :: Bool+                             _rulesOo_dovisit :: Bool+                             _rulesOo_newtypes :: Bool+                             _rulesOo_rename :: Bool+                             _rulesOo_sem :: Bool+                             _rulesOo_sig :: Bool+                             _rulesOo_wantvisit :: Bool+                             _rulesOprefix :: String+                             _rulesOsyn :: Attributes+                             _childrenIattributes :: ([(Name,Attributes,Attributes)])+                             _childrenIcollectChildrenSyns :: (Map Name Attributes )+                             _childrenIerrors :: (Seq Error)+                             _childrenIfields :: ([(Name,Type,Bool)])+                             _childrenIgathAltAttrs :: ([AltAttr])+                             _childrenIgathRules :: (Seq CRule)+                             _childrenIinhs :: (Seq (Name,Attributes))+                             _childrenInts :: (Seq (Name,Nonterminal))+                             _childrenIsinglevisits :: ([CRule])+                             _childrenIterminals :: ([Name])+                             _rulesIadditionalDep :: (Seq Edge)+                             _rulesIdirectDep :: (Seq Edge)+                             _rulesIerrors :: (Seq Error)+                             _rulesIgathAltAttrs :: ([AltAttr])+                             _rulesIgathRules :: (Seq CRule)+                             _rulesIinstDep :: (Seq Edge)+                             _rulesIinstVars :: ([Name])+                             _rulesIlocVars :: ([Name])+                             _typeSigsItypeSigs :: (Map Name Type)+                             -- "Order.ag"(line 69, column 17)+                             _childrenOcon =+                                 con_+                             -- "Order.ag"(line 71, column 17)+                             _rulesOcon =+                                 con_+                             -- "Order.ag"(line 148, column 19)+                             _gathAltAttrs =+                                 [ AltAttr _LHS inh True | inh <- Map.keys _lhsIinh ]+                                 ++ _childrenIgathAltAttrs+                                 ++ _rulesIgathAltAttrs+                             -- "Order.ag"(line 164, column 18)+                             _rulesOaltAttrs =+                                 Map.fromList (zip _gathAltAttrs [_lhsIvcount..])+                             -- "Order.ag"(line 177, column 19)+                             _rulesOchildNts =+                                 Map.fromList (Seq.toList _childrenInts)+                             -- "Order.ag"(line 178, column 19)+                             _rulesOchildInhs =+                                 Map.fromList (Seq.toList _childrenIinhs)+                             -- "Order.ag"(line 184, column 19)+                             _inhRules =+                                 [ cRuleLhsInh inh _lhsInt con_ tp | (inh,tp) <- Map.assocs _lhsIinh ]+                             -- "Order.ag"(line 185, column 19)+                             _gathRules =+                                 _inhRules ++ Seq.toList (_childrenIgathRules Seq.<> _rulesIgathRules)+                             -- "Order.ag"(line 238, column 19)+                             _lhsOrules =+                                 Seq.fromList (zip [_lhsIvcount..] _gathRules)+                             -- "Order.ag"(line 239, column 19)+                             _lhsOvcount =+                                 _lhsIvcount + length _gathRules+                             -- "Order.ag"(line 306, column 18)+                             _rulesOsynsOfChildren =+                                 _childrenIcollectChildrenSyns+                             -- "Order.ag"(line 384, column 19)+                             _lhsOcons =+                                 [con_]+                             -- "Order.ag"(line 391, column 17)+                             _typeSigsOtypeSigs =+                                 Map.empty+                             -- "Order.ag"(line 397, column 18)+                             _rulesOallTypeSigs =+                                 _typeSigsItypeSigs+                             -- "Order.ag"(line 463, column 18)+                             _cVisits =+                                 if  _lhsIo_dovisit+                                     then let altsVisitsMap = findWithErr1 "Alternative.cVisits.nt" _lhsInt _lhsIcVisitsMap+                                              visits = findWithErr1 "Alternative.cVisits.con" con_ altsVisitsMap+                                           in visits+                                     else  let  vss = nubBy eqCRuleDefines _gathRules ++ _childrenIsinglevisits+                                           in  [CVisit _lhsIinh _lhsIsyn vss [] False]+                             -- "Order.ag"(line 489, column 19)+                             _lhsOcAlternative =+                                 CAlternative con_ _cVisits _childrenIfields _childrenIterminals+                             -- "Order.ag"(line 513, column 17)+                             _allfields =+                                 _childrenIfields+                             -- "Order.ag"(line 513, column 17)+                             _attrs =+                                 map ((,) _LOC)  _rulesIlocVars +++                                 map ((,) _INST) _rulesIinstVars +++                                 map ((,) _LHS)  _inhnames +++                                 concat [map ((,) nm) (Map.keys as) | (nm,_,as) <- _childrenIattributes]+                             -- "Order.ag"(line 513, column 17)+                             _inhnames =+                                 Map.keys _lhsIinh+                             -- "Order.ag"(line 513, column 17)+                             _synnames =+                                 Map.keys _lhsIsyn+                             -- use rule "Order.ag"(line 258, column 71)+                             _lhsOadditionalDep =+                                 _rulesIadditionalDep+                             -- use rule "Order.ag"(line 244, column 33)+                             _lhsOdirectDep =+                                 _rulesIdirectDep+                             -- use rule "Order.ag"(line 60, column 70)+                             _lhsOerrors =+                                 _childrenIerrors Seq.<> _rulesIerrors+                             -- use rule "Order.ag"(line 289, column 31)+                             _lhsOinstDep =+                                 _rulesIinstDep+                             -- copy rule (from local)+                             _childrenOallfields =+                                 _allfields+                             -- copy rule (down)+                             _childrenOallnts =+                                 _lhsIallnts+                             -- copy rule (from local)+                             _childrenOattrs =+                                 _attrs+                             -- copy rule (down)+                             _childrenOinh =+                                 _lhsIinh+                             -- copy rule (down)+                             _childrenOnt =+                                 _lhsInt+                             -- copy rule (down)+                             _childrenOo_unbox =+                                 _lhsIo_unbox+                             -- copy rule (down)+                             _childrenOsyn =+                                 _lhsIsyn+                             -- copy rule (from local)+                             _rulesOallfields =+                                 _allfields+                             -- copy rule (down)+                             _rulesOallnts =+                                 _lhsIallnts+                             -- copy rule (from local)+                             _rulesOattrs =+                                 _attrs+                             -- copy rule (down)+                             _rulesOinh =+                                 _lhsIinh+                             -- copy rule (down)+                             _rulesOmanualAttrDepMap =+                                 _lhsImanualAttrDepMap+                             -- copy rule (down)+                             _rulesOnt =+                                 _lhsInt+                             -- copy rule (down)+                             _rulesOo_case =+                                 _lhsIo_case+                             -- copy rule (down)+                             _rulesOo_cata =+                                 _lhsIo_cata+                             -- copy rule (down)+                             _rulesOo_dovisit =+                                 _lhsIo_dovisit+                             -- copy rule (down)+                             _rulesOo_newtypes =+                                 _lhsIo_newtypes+                             -- copy rule (down)+                             _rulesOo_rename =+                                 _lhsIo_rename+                             -- copy rule (down)+                             _rulesOo_sem =+                                 _lhsIo_sem+                             -- copy rule (down)+                             _rulesOo_sig =+                                 _lhsIo_sig+                             -- copy rule (down)+                             _rulesOo_wantvisit =+                                 _lhsIo_wantvisit+                             -- copy rule (down)+                             _rulesOprefix =+                                 _lhsIprefix+                             -- copy rule (down)+                             _rulesOsyn =+                                 _lhsIsyn+                             ( _childrenIattributes,_childrenIcollectChildrenSyns,_childrenIerrors,_childrenIfields,_childrenIgathAltAttrs,_childrenIgathRules,_childrenIinhs,_childrenInts,_childrenIsinglevisits,_childrenIterminals) =+                                 (children_ _childrenOallfields _childrenOallnts _childrenOattrs _childrenOcon _childrenOinh _childrenOnt _childrenOo_unbox _childrenOsyn )+                             ( _rulesIadditionalDep,_rulesIdirectDep,_rulesIerrors,_rulesIgathAltAttrs,_rulesIgathRules,_rulesIinstDep,_rulesIinstVars,_rulesIlocVars) =+                                 (rules_ _rulesOallTypeSigs _rulesOallfields _rulesOallnts _rulesOaltAttrs _rulesOattrs _rulesOchildInhs _rulesOchildNts _rulesOcon _rulesOinh _rulesOmanualAttrDepMap _rulesOnt _rulesOo_case _rulesOo_cata _rulesOo_dovisit _rulesOo_newtypes _rulesOo_rename _rulesOo_sem _rulesOo_sig _rulesOo_wantvisit _rulesOprefix _rulesOsyn _rulesOsynsOfChildren )+                             ( _typeSigsItypeSigs) =+                                 (typeSigs_ _typeSigsOtypeSigs )+                         in  ( _lhsOadditionalDep,_lhsOcAlternative,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOrules,_lhsOvcount))) )+-- Alternatives ------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allnts               : [Name]+         cVisitsMap           : CVisitsMap+         inh                  : Attributes+         manualAttrDepMap     : AttrOrderMap+         nt                   : Identifier+         o_case               : Bool+         o_cata               : Bool+         o_dovisit            : Bool+         o_newtypes           : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_unbox              : Bool+         o_wantvisit          : Bool+         prefix               : String+         syn                  : Attributes+      chained attribute:+         vcount               : Int+      synthesized attributes:+         additionalDep        : Seq Edge+         cAlternatives        : CAlternatives+         cons                 : [Constructor]+         directDep            : Seq Edge+         errors               : Seq Error+         instDep              : Seq Edge+         rules                : Seq (Vertex,CRule)+   alternatives:+      alternative Cons:+         child hd             : Alternative+         child tl             : Alternatives+      alternative Nil:+-}+-- cata+sem_Alternatives :: Alternatives ->+                    T_Alternatives+sem_Alternatives list  =+    (Prelude.foldr sem_Alternatives_Cons sem_Alternatives_Nil (Prelude.map sem_Alternative list) )+-- semantic domain+newtype T_Alternatives = T_Alternatives (([Name]) ->+                                         CVisitsMap ->+                                         Attributes ->+                                         AttrOrderMap ->+                                         Identifier ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         Bool ->+                                         String ->+                                         Attributes ->+                                         Int ->+                                         ( (Seq Edge),CAlternatives,([Constructor]),(Seq Edge),(Seq Error),(Seq Edge),(Seq (Vertex,CRule)),Int))+data Inh_Alternatives = Inh_Alternatives {allnts_Inh_Alternatives :: [Name],cVisitsMap_Inh_Alternatives :: CVisitsMap,inh_Inh_Alternatives :: Attributes,manualAttrDepMap_Inh_Alternatives :: AttrOrderMap,nt_Inh_Alternatives :: Identifier,o_case_Inh_Alternatives :: Bool,o_cata_Inh_Alternatives :: Bool,o_dovisit_Inh_Alternatives :: Bool,o_newtypes_Inh_Alternatives :: Bool,o_rename_Inh_Alternatives :: Bool,o_sem_Inh_Alternatives :: Bool,o_sig_Inh_Alternatives :: Bool,o_unbox_Inh_Alternatives :: Bool,o_wantvisit_Inh_Alternatives :: Bool,prefix_Inh_Alternatives :: String,syn_Inh_Alternatives :: Attributes,vcount_Inh_Alternatives :: Int}+data Syn_Alternatives = Syn_Alternatives {additionalDep_Syn_Alternatives :: Seq Edge,cAlternatives_Syn_Alternatives :: CAlternatives,cons_Syn_Alternatives :: [Constructor],directDep_Syn_Alternatives :: Seq Edge,errors_Syn_Alternatives :: Seq Error,instDep_Syn_Alternatives :: Seq Edge,rules_Syn_Alternatives :: Seq (Vertex,CRule),vcount_Syn_Alternatives :: Int}+wrap_Alternatives (T_Alternatives sem ) (Inh_Alternatives _lhsIallnts _lhsIcVisitsMap _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIvcount )  =+    (let ( _lhsOadditionalDep,_lhsOcAlternatives,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOrules,_lhsOvcount) =+             (sem _lhsIallnts _lhsIcVisitsMap _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIvcount )+     in  (Syn_Alternatives _lhsOadditionalDep _lhsOcAlternatives _lhsOcons _lhsOdirectDep _lhsOerrors _lhsOinstDep _lhsOrules _lhsOvcount ))+sem_Alternatives_Cons :: T_Alternative ->+                         T_Alternatives ->+                         T_Alternatives+sem_Alternatives_Cons (T_Alternative hd_ ) (T_Alternatives tl_ )  =+    (T_Alternatives (\ _lhsIallnts+                       _lhsIcVisitsMap+                       _lhsIinh+                       _lhsImanualAttrDepMap+                       _lhsInt+                       _lhsIo_case+                       _lhsIo_cata+                       _lhsIo_dovisit+                       _lhsIo_newtypes+                       _lhsIo_rename+                       _lhsIo_sem+                       _lhsIo_sig+                       _lhsIo_unbox+                       _lhsIo_wantvisit+                       _lhsIprefix+                       _lhsIsyn+                       _lhsIvcount ->+                         (let _lhsOcAlternatives :: CAlternatives+                              _lhsOadditionalDep :: (Seq Edge)+                              _lhsOcons :: ([Constructor])+                              _lhsOdirectDep :: (Seq Edge)+                              _lhsOerrors :: (Seq Error)+                              _lhsOinstDep :: (Seq Edge)+                              _lhsOrules :: (Seq (Vertex,CRule))+                              _lhsOvcount :: Int+                              _hdOallnts :: ([Name])+                              _hdOcVisitsMap :: CVisitsMap+                              _hdOinh :: Attributes+                              _hdOmanualAttrDepMap :: AttrOrderMap+                              _hdOnt :: Identifier+                              _hdOo_case :: Bool+                              _hdOo_cata :: Bool+                              _hdOo_dovisit :: Bool+                              _hdOo_newtypes :: Bool+                              _hdOo_rename :: Bool+                              _hdOo_sem :: Bool+                              _hdOo_sig :: Bool+                              _hdOo_unbox :: Bool+                              _hdOo_wantvisit :: Bool+                              _hdOprefix :: String+                              _hdOsyn :: Attributes+                              _hdOvcount :: Int+                              _tlOallnts :: ([Name])+                              _tlOcVisitsMap :: CVisitsMap+                              _tlOinh :: Attributes+                              _tlOmanualAttrDepMap :: AttrOrderMap+                              _tlOnt :: Identifier+                              _tlOo_case :: Bool+                              _tlOo_cata :: Bool+                              _tlOo_dovisit :: Bool+                              _tlOo_newtypes :: Bool+                              _tlOo_rename :: Bool+                              _tlOo_sem :: Bool+                              _tlOo_sig :: Bool+                              _tlOo_unbox :: Bool+                              _tlOo_wantvisit :: Bool+                              _tlOprefix :: String+                              _tlOsyn :: Attributes+                              _tlOvcount :: Int+                              _hdIadditionalDep :: (Seq Edge)+                              _hdIcAlternative :: CAlternative+                              _hdIcons :: ([Constructor])+                              _hdIdirectDep :: (Seq Edge)+                              _hdIerrors :: (Seq Error)+                              _hdIinstDep :: (Seq Edge)+                              _hdIrules :: (Seq (Vertex,CRule))+                              _hdIvcount :: Int+                              _tlIadditionalDep :: (Seq Edge)+                              _tlIcAlternatives :: CAlternatives+                              _tlIcons :: ([Constructor])+                              _tlIdirectDep :: (Seq Edge)+                              _tlIerrors :: (Seq Error)+                              _tlIinstDep :: (Seq Edge)+                              _tlIrules :: (Seq (Vertex,CRule))+                              _tlIvcount :: Int+                              -- "Order.ag"(line 486, column 12)+                              _lhsOcAlternatives =+                                  _hdIcAlternative : _tlIcAlternatives+                              -- use rule "Order.ag"(line 258, column 71)+                              _lhsOadditionalDep =+                                  _hdIadditionalDep Seq.<> _tlIadditionalDep+                              -- use rule "Order.ag"(line 382, column 42)+                              _lhsOcons =+                                  _hdIcons ++ _tlIcons+                              -- use rule "Order.ag"(line 244, column 33)+                              _lhsOdirectDep =+                                  _hdIdirectDep Seq.<> _tlIdirectDep+                              -- use rule "Order.ag"(line 60, column 70)+                              _lhsOerrors =+                                  _hdIerrors Seq.<> _tlIerrors+                              -- use rule "Order.ag"(line 289, column 31)+                              _lhsOinstDep =+                                  _hdIinstDep Seq.<> _tlIinstDep+                              -- use rule "Order.ag"(line 234, column 18)+                              _lhsOrules =+                                  _hdIrules Seq.<> _tlIrules+                              -- copy rule (up)+                              _lhsOvcount =+                                  _tlIvcount+                              -- copy rule (down)+                              _hdOallnts =+                                  _lhsIallnts+                              -- copy rule (down)+                              _hdOcVisitsMap =+                                  _lhsIcVisitsMap+                              -- copy rule (down)+                              _hdOinh =+                                  _lhsIinh+                              -- copy rule (down)+                              _hdOmanualAttrDepMap =+                                  _lhsImanualAttrDepMap+                              -- copy rule (down)+                              _hdOnt =+                                  _lhsInt+                              -- copy rule (down)+                              _hdOo_case =+                                  _lhsIo_case+                              -- copy rule (down)+                              _hdOo_cata =+                                  _lhsIo_cata+                              -- copy rule (down)+                              _hdOo_dovisit =+                                  _lhsIo_dovisit+                              -- copy rule (down)+                              _hdOo_newtypes =+                                  _lhsIo_newtypes+                              -- copy rule (down)+                              _hdOo_rename =+                                  _lhsIo_rename+                              -- copy rule (down)+                              _hdOo_sem =+                                  _lhsIo_sem+                              -- copy rule (down)+                              _hdOo_sig =+                                  _lhsIo_sig+                              -- copy rule (down)+                              _hdOo_unbox =+                                  _lhsIo_unbox+                              -- copy rule (down)+                              _hdOo_wantvisit =+                                  _lhsIo_wantvisit+                              -- copy rule (down)+                              _hdOprefix =+                                  _lhsIprefix+                              -- copy rule (down)+                              _hdOsyn =+                                  _lhsIsyn+                              -- copy rule (down)+                              _hdOvcount =+                                  _lhsIvcount+                              -- copy rule (down)+                              _tlOallnts =+                                  _lhsIallnts+                              -- copy rule (down)+                              _tlOcVisitsMap =+                                  _lhsIcVisitsMap+                              -- copy rule (down)+                              _tlOinh =+                                  _lhsIinh+                              -- copy rule (down)+                              _tlOmanualAttrDepMap =+                                  _lhsImanualAttrDepMap+                              -- copy rule (down)+                              _tlOnt =+                                  _lhsInt+                              -- copy rule (down)+                              _tlOo_case =+                                  _lhsIo_case+                              -- copy rule (down)+                              _tlOo_cata =+                                  _lhsIo_cata+                              -- copy rule (down)+                              _tlOo_dovisit =+                                  _lhsIo_dovisit+                              -- copy rule (down)+                              _tlOo_newtypes =+                                  _lhsIo_newtypes+                              -- copy rule (down)+                              _tlOo_rename =+                                  _lhsIo_rename+                              -- copy rule (down)+                              _tlOo_sem =+                                  _lhsIo_sem+                              -- copy rule (down)+                              _tlOo_sig =+                                  _lhsIo_sig+                              -- copy rule (down)+                              _tlOo_unbox =+                                  _lhsIo_unbox+                              -- copy rule (down)+                              _tlOo_wantvisit =+                                  _lhsIo_wantvisit+                              -- copy rule (down)+                              _tlOprefix =+                                  _lhsIprefix+                              -- copy rule (down)+                              _tlOsyn =+                                  _lhsIsyn+                              -- copy rule (chain)+                              _tlOvcount =+                                  _hdIvcount+                              ( _hdIadditionalDep,_hdIcAlternative,_hdIcons,_hdIdirectDep,_hdIerrors,_hdIinstDep,_hdIrules,_hdIvcount) =+                                  (hd_ _hdOallnts _hdOcVisitsMap _hdOinh _hdOmanualAttrDepMap _hdOnt _hdOo_case _hdOo_cata _hdOo_dovisit _hdOo_newtypes _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_unbox _hdOo_wantvisit _hdOprefix _hdOsyn _hdOvcount )+                              ( _tlIadditionalDep,_tlIcAlternatives,_tlIcons,_tlIdirectDep,_tlIerrors,_tlIinstDep,_tlIrules,_tlIvcount) =+                                  (tl_ _tlOallnts _tlOcVisitsMap _tlOinh _tlOmanualAttrDepMap _tlOnt _tlOo_case _tlOo_cata _tlOo_dovisit _tlOo_newtypes _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_unbox _tlOo_wantvisit _tlOprefix _tlOsyn _tlOvcount )+                          in  ( _lhsOadditionalDep,_lhsOcAlternatives,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOrules,_lhsOvcount))) )+sem_Alternatives_Nil :: T_Alternatives+sem_Alternatives_Nil  =+    (T_Alternatives (\ _lhsIallnts+                       _lhsIcVisitsMap+                       _lhsIinh+                       _lhsImanualAttrDepMap+                       _lhsInt+                       _lhsIo_case+                       _lhsIo_cata+                       _lhsIo_dovisit+                       _lhsIo_newtypes+                       _lhsIo_rename+                       _lhsIo_sem+                       _lhsIo_sig+                       _lhsIo_unbox+                       _lhsIo_wantvisit+                       _lhsIprefix+                       _lhsIsyn+                       _lhsIvcount ->+                         (let _lhsOcAlternatives :: CAlternatives+                              _lhsOadditionalDep :: (Seq Edge)+                              _lhsOcons :: ([Constructor])+                              _lhsOdirectDep :: (Seq Edge)+                              _lhsOerrors :: (Seq Error)+                              _lhsOinstDep :: (Seq Edge)+                              _lhsOrules :: (Seq (Vertex,CRule))+                              _lhsOvcount :: Int+                              -- "Order.ag"(line 487, column 12)+                              _lhsOcAlternatives =+                                  []+                              -- use rule "Order.ag"(line 258, column 71)+                              _lhsOadditionalDep =+                                  Seq.empty+                              -- use rule "Order.ag"(line 382, column 42)+                              _lhsOcons =+                                  []+                              -- use rule "Order.ag"(line 244, column 33)+                              _lhsOdirectDep =+                                  Seq.empty+                              -- use rule "Order.ag"(line 60, column 70)+                              _lhsOerrors =+                                  Seq.empty+                              -- use rule "Order.ag"(line 289, column 31)+                              _lhsOinstDep =+                                  Seq.empty+                              -- use rule "Order.ag"(line 234, column 18)+                              _lhsOrules =+                                  Seq.empty+                              -- copy rule (chain)+                              _lhsOvcount =+                                  _lhsIvcount+                          in  ( _lhsOadditionalDep,_lhsOcAlternatives,_lhsOcons,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOrules,_lhsOvcount))) )+-- Child -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         attrs                : [(Name,Name)]+         con                  : Identifier+         inh                  : Attributes+         nt                   : Identifier+         o_unbox              : Bool+         syn                  : Attributes+      synthesized attributes:+         attributes           : [(Name,Attributes,Attributes)]+         collectChildrenSyns  : Map Name Attributes +         errors               : Seq Error+         field                : (Name,Type,Bool)+         gathAltAttrs         : [AltAttr]+         gathRules            : Seq CRule+         inhs                 : Seq (Name,Attributes)+         nts                  : Seq (Name,Nonterminal)+         singlevisits         : [CRule]+         terminals            : [Name]+   alternatives:+      alternative Child:+         child name           : {Name}+         child tp             : {Type}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child higherOrder    : {Bool}+         visit 0:+            local maptolocal  : _+            local gathRules   : _+-}+-- cata+sem_Child :: Child ->+             T_Child+sem_Child (Child _name _tp _inh _syn _higherOrder )  =+    (sem_Child_Child _name _tp _inh _syn _higherOrder )+-- semantic domain+newtype T_Child = T_Child (([(Name,Type,Bool)]) ->+                           ([Name]) ->+                           ([(Name,Name)]) ->+                           Identifier ->+                           Attributes ->+                           Identifier ->+                           Bool ->+                           Attributes ->+                           ( ([(Name,Attributes,Attributes)]),(Map Name Attributes ),(Seq Error),((Name,Type,Bool)),([AltAttr]),(Seq CRule),(Seq (Name,Attributes)),(Seq (Name,Nonterminal)),([CRule]),([Name])))+data Inh_Child = Inh_Child {allfields_Inh_Child :: [(Name,Type,Bool)],allnts_Inh_Child :: [Name],attrs_Inh_Child :: [(Name,Name)],con_Inh_Child :: Identifier,inh_Inh_Child :: Attributes,nt_Inh_Child :: Identifier,o_unbox_Inh_Child :: Bool,syn_Inh_Child :: Attributes}+data Syn_Child = Syn_Child {attributes_Syn_Child :: [(Name,Attributes,Attributes)],collectChildrenSyns_Syn_Child :: Map Name Attributes ,errors_Syn_Child :: Seq Error,field_Syn_Child :: (Name,Type,Bool),gathAltAttrs_Syn_Child :: [AltAttr],gathRules_Syn_Child :: Seq CRule,inhs_Syn_Child :: Seq (Name,Attributes),nts_Syn_Child :: Seq (Name,Nonterminal),singlevisits_Syn_Child :: [CRule],terminals_Syn_Child :: [Name]}+wrap_Child (T_Child sem ) (Inh_Child _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsInt _lhsIo_unbox _lhsIsyn )  =+    (let ( _lhsOattributes,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfield,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals) =+             (sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsInt _lhsIo_unbox _lhsIsyn )+     in  (Syn_Child _lhsOattributes _lhsOcollectChildrenSyns _lhsOerrors _lhsOfield _lhsOgathAltAttrs _lhsOgathRules _lhsOinhs _lhsOnts _lhsOsinglevisits _lhsOterminals ))+sem_Child_Child :: Name ->+                   Type ->+                   Attributes ->+                   Attributes ->+                   Bool ->+                   T_Child+sem_Child_Child name_ tp_ inh_ syn_ higherOrder_  =+    (T_Child (\ _lhsIallfields+                _lhsIallnts+                _lhsIattrs+                _lhsIcon+                _lhsIinh+                _lhsInt+                _lhsIo_unbox+                _lhsIsyn ->+                  (let _lhsOgathAltAttrs :: ([AltAttr])+                       _lhsOnts :: (Seq (Name,Nonterminal))+                       _lhsOinhs :: (Seq (Name,Attributes))+                       _lhsOcollectChildrenSyns :: (Map Name Attributes )+                       _lhsOsinglevisits :: ([CRule])+                       _lhsOterminals :: ([Name])+                       _lhsOattributes :: ([(Name,Attributes,Attributes)])+                       _lhsOfield :: ((Name,Type,Bool))+                       _lhsOerrors :: (Seq Error)+                       _lhsOgathRules :: (Seq CRule)+                       -- "Order.ag"(line 153, column 13)+                       _maptolocal =+                           case tp_ of+                             NT nt  -> Map.null syn_+                             _      -> True+                       -- "Order.ag"(line 156, column 13)+                       _lhsOgathAltAttrs =+                           if  _maptolocal+                               then [ AltAttr _LOC name_ True ]+                               else [ AltAttr name_ syn True | syn <- Map.keys syn_ ]+                       -- "Order.ag"(line 171, column 13)+                       _lhsOnts =+                           Seq.single (name_,getNtName tp_)+                       -- "Order.ag"(line 172, column 13)+                       _lhsOinhs =+                           Seq.single (name_,inh_)+                       -- "Order.ag"(line 188, column 13)+                       _gathRules =+                           if  _maptolocal+                               then Seq.single (cRuleTerminal name_ _lhsInt _lhsIcon tp_)+                               else Seq.fromList [ cRuleRhsSyn syn _lhsInt _lhsIcon tp name_ (getNtName tp_) | (syn,tp) <- Map.assocs syn_]+                       -- "Order.ag"(line 310, column 12)+                       _lhsOcollectChildrenSyns =+                           Map.singleton name_ syn_+                       -- "Order.ag"(line 473, column 11)+                       _lhsOsinglevisits =+                           if  _maptolocal+                               then []+                               else [CChildVisit name_ (getNtName tp_) 0 inh_ syn_ True]+                       -- "Order.ag"(line 494, column 11)+                       _lhsOterminals =+                           if _maptolocal+                           then [name_]+                           else []+                       -- "Order.ag"(line 523, column 11)+                       _lhsOattributes =+                           [(name_, inh_, syn_)]+                       -- "Order.ag"(line 527, column 11)+                       _lhsOfield =+                           (name_, tp_, higherOrder_)+                       -- use rule "Order.ag"(line 60, column 70)+                       _lhsOerrors =+                           Seq.empty+                       -- use rule "Order.ag"(line 182, column 23)+                       _lhsOgathRules =+                           _gathRules+                   in  ( _lhsOattributes,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfield,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals))) )+-- Children ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         attrs                : [(Name,Name)]+         con                  : Identifier+         inh                  : Attributes+         nt                   : Identifier+         o_unbox              : Bool+         syn                  : Attributes+      synthesized attributes:+         attributes           : [(Name,Attributes,Attributes)]+         collectChildrenSyns  : Map Name Attributes +         errors               : Seq Error+         fields               : [(Name,Type,Bool)]+         gathAltAttrs         : [AltAttr]+         gathRules            : Seq CRule+         inhs                 : Seq (Name,Attributes)+         nts                  : Seq (Name,Nonterminal)+         singlevisits         : [CRule]+         terminals            : [Name]+   alternatives:+      alternative Cons:+         child hd             : Child+         child tl             : Children+      alternative Nil:+-}+-- cata+sem_Children :: Children ->+                T_Children+sem_Children list  =+    (Prelude.foldr sem_Children_Cons sem_Children_Nil (Prelude.map sem_Child list) )+-- semantic domain+newtype T_Children = T_Children (([(Name,Type,Bool)]) ->+                                 ([Name]) ->+                                 ([(Name,Name)]) ->+                                 Identifier ->+                                 Attributes ->+                                 Identifier ->+                                 Bool ->+                                 Attributes ->+                                 ( ([(Name,Attributes,Attributes)]),(Map Name Attributes ),(Seq Error),([(Name,Type,Bool)]),([AltAttr]),(Seq CRule),(Seq (Name,Attributes)),(Seq (Name,Nonterminal)),([CRule]),([Name])))+data Inh_Children = Inh_Children {allfields_Inh_Children :: [(Name,Type,Bool)],allnts_Inh_Children :: [Name],attrs_Inh_Children :: [(Name,Name)],con_Inh_Children :: Identifier,inh_Inh_Children :: Attributes,nt_Inh_Children :: Identifier,o_unbox_Inh_Children :: Bool,syn_Inh_Children :: Attributes}+data Syn_Children = Syn_Children {attributes_Syn_Children :: [(Name,Attributes,Attributes)],collectChildrenSyns_Syn_Children :: Map Name Attributes ,errors_Syn_Children :: Seq Error,fields_Syn_Children :: [(Name,Type,Bool)],gathAltAttrs_Syn_Children :: [AltAttr],gathRules_Syn_Children :: Seq CRule,inhs_Syn_Children :: Seq (Name,Attributes),nts_Syn_Children :: Seq (Name,Nonterminal),singlevisits_Syn_Children :: [CRule],terminals_Syn_Children :: [Name]}+wrap_Children (T_Children sem ) (Inh_Children _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsInt _lhsIo_unbox _lhsIsyn )  =+    (let ( _lhsOattributes,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfields,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals) =+             (sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsInt _lhsIo_unbox _lhsIsyn )+     in  (Syn_Children _lhsOattributes _lhsOcollectChildrenSyns _lhsOerrors _lhsOfields _lhsOgathAltAttrs _lhsOgathRules _lhsOinhs _lhsOnts _lhsOsinglevisits _lhsOterminals ))+sem_Children_Cons :: T_Child ->+                     T_Children ->+                     T_Children+sem_Children_Cons (T_Child hd_ ) (T_Children tl_ )  =+    (T_Children (\ _lhsIallfields+                   _lhsIallnts+                   _lhsIattrs+                   _lhsIcon+                   _lhsIinh+                   _lhsInt+                   _lhsIo_unbox+                   _lhsIsyn ->+                     (let _lhsOfields :: ([(Name,Type,Bool)])+                          _lhsOattributes :: ([(Name,Attributes,Attributes)])+                          _lhsOcollectChildrenSyns :: (Map Name Attributes )+                          _lhsOerrors :: (Seq Error)+                          _lhsOgathAltAttrs :: ([AltAttr])+                          _lhsOgathRules :: (Seq CRule)+                          _lhsOinhs :: (Seq (Name,Attributes))+                          _lhsOnts :: (Seq (Name,Nonterminal))+                          _lhsOsinglevisits :: ([CRule])+                          _lhsOterminals :: ([Name])+                          _hdOallfields :: ([(Name,Type,Bool)])+                          _hdOallnts :: ([Name])+                          _hdOattrs :: ([(Name,Name)])+                          _hdOcon :: Identifier+                          _hdOinh :: Attributes+                          _hdOnt :: Identifier+                          _hdOo_unbox :: Bool+                          _hdOsyn :: Attributes+                          _tlOallfields :: ([(Name,Type,Bool)])+                          _tlOallnts :: ([Name])+                          _tlOattrs :: ([(Name,Name)])+                          _tlOcon :: Identifier+                          _tlOinh :: Attributes+                          _tlOnt :: Identifier+                          _tlOo_unbox :: Bool+                          _tlOsyn :: Attributes+                          _hdIattributes :: ([(Name,Attributes,Attributes)])+                          _hdIcollectChildrenSyns :: (Map Name Attributes )+                          _hdIerrors :: (Seq Error)+                          _hdIfield :: ((Name,Type,Bool))+                          _hdIgathAltAttrs :: ([AltAttr])+                          _hdIgathRules :: (Seq CRule)+                          _hdIinhs :: (Seq (Name,Attributes))+                          _hdInts :: (Seq (Name,Nonterminal))+                          _hdIsinglevisits :: ([CRule])+                          _hdIterminals :: ([Name])+                          _tlIattributes :: ([(Name,Attributes,Attributes)])+                          _tlIcollectChildrenSyns :: (Map Name Attributes )+                          _tlIerrors :: (Seq Error)+                          _tlIfields :: ([(Name,Type,Bool)])+                          _tlIgathAltAttrs :: ([AltAttr])+                          _tlIgathRules :: (Seq CRule)+                          _tlIinhs :: (Seq (Name,Attributes))+                          _tlInts :: (Seq (Name,Nonterminal))+                          _tlIsinglevisits :: ([CRule])+                          _tlIterminals :: ([Name])+                          -- "Order.ag"(line 530, column 11)+                          _lhsOfields =+                              _hdIfield : _tlIfields+                          -- use rule "Order.ag"(line 521, column 32)+                          _lhsOattributes =+                              _hdIattributes ++ _tlIattributes+                          -- use rule "Order.ag"(line 308, column 47)+                          _lhsOcollectChildrenSyns =+                              _hdIcollectChildrenSyns `Map.union` _tlIcollectChildrenSyns+                          -- use rule "Order.ag"(line 60, column 70)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- use rule "Order.ag"(line 146, column 68)+                          _lhsOgathAltAttrs =+                              _hdIgathAltAttrs ++ _tlIgathAltAttrs+                          -- use rule "Order.ag"(line 182, column 23)+                          _lhsOgathRules =+                              _hdIgathRules Seq.<> _tlIgathRules+                          -- use rule "Order.ag"(line 169, column 20)+                          _lhsOinhs =+                              _hdIinhs Seq.<> _tlIinhs+                          -- use rule "Order.ag"(line 168, column 19)+                          _lhsOnts =+                              _hdInts Seq.<> _tlInts+                          -- use rule "Order.ag"(line 471, column 40)+                          _lhsOsinglevisits =+                              _hdIsinglevisits ++ _tlIsinglevisits+                          -- use rule "Order.ag"(line 492, column 38)+                          _lhsOterminals =+                              _hdIterminals ++ _tlIterminals+                          -- copy rule (down)+                          _hdOallfields =+                              _lhsIallfields+                          -- copy rule (down)+                          _hdOallnts =+                              _lhsIallnts+                          -- copy rule (down)+                          _hdOattrs =+                              _lhsIattrs+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOinh =+                              _lhsIinh+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (down)+                          _hdOo_unbox =+                              _lhsIo_unbox+                          -- copy rule (down)+                          _hdOsyn =+                              _lhsIsyn+                          -- copy rule (down)+                          _tlOallfields =+                              _lhsIallfields+                          -- copy rule (down)+                          _tlOallnts =+                              _lhsIallnts+                          -- copy rule (down)+                          _tlOattrs =+                              _lhsIattrs+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _tlOinh =+                              _lhsIinh+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          -- copy rule (down)+                          _tlOo_unbox =+                              _lhsIo_unbox+                          -- copy rule (down)+                          _tlOsyn =+                              _lhsIsyn+                          ( _hdIattributes,_hdIcollectChildrenSyns,_hdIerrors,_hdIfield,_hdIgathAltAttrs,_hdIgathRules,_hdIinhs,_hdInts,_hdIsinglevisits,_hdIterminals) =+                              (hd_ _hdOallfields _hdOallnts _hdOattrs _hdOcon _hdOinh _hdOnt _hdOo_unbox _hdOsyn )+                          ( _tlIattributes,_tlIcollectChildrenSyns,_tlIerrors,_tlIfields,_tlIgathAltAttrs,_tlIgathRules,_tlIinhs,_tlInts,_tlIsinglevisits,_tlIterminals) =+                              (tl_ _tlOallfields _tlOallnts _tlOattrs _tlOcon _tlOinh _tlOnt _tlOo_unbox _tlOsyn )+                      in  ( _lhsOattributes,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfields,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals))) )+sem_Children_Nil :: T_Children+sem_Children_Nil  =+    (T_Children (\ _lhsIallfields+                   _lhsIallnts+                   _lhsIattrs+                   _lhsIcon+                   _lhsIinh+                   _lhsInt+                   _lhsIo_unbox+                   _lhsIsyn ->+                     (let _lhsOfields :: ([(Name,Type,Bool)])+                          _lhsOattributes :: ([(Name,Attributes,Attributes)])+                          _lhsOcollectChildrenSyns :: (Map Name Attributes )+                          _lhsOerrors :: (Seq Error)+                          _lhsOgathAltAttrs :: ([AltAttr])+                          _lhsOgathRules :: (Seq CRule)+                          _lhsOinhs :: (Seq (Name,Attributes))+                          _lhsOnts :: (Seq (Name,Nonterminal))+                          _lhsOsinglevisits :: ([CRule])+                          _lhsOterminals :: ([Name])+                          -- "Order.ag"(line 531, column 11)+                          _lhsOfields =+                              []+                          -- use rule "Order.ag"(line 521, column 32)+                          _lhsOattributes =+                              []+                          -- use rule "Order.ag"(line 308, column 47)+                          _lhsOcollectChildrenSyns =+                              Map.empty+                          -- use rule "Order.ag"(line 60, column 70)+                          _lhsOerrors =+                              Seq.empty+                          -- use rule "Order.ag"(line 146, column 68)+                          _lhsOgathAltAttrs =+                              []+                          -- use rule "Order.ag"(line 182, column 23)+                          _lhsOgathRules =+                              Seq.empty+                          -- use rule "Order.ag"(line 169, column 20)+                          _lhsOinhs =+                              Seq.empty+                          -- use rule "Order.ag"(line 168, column 19)+                          _lhsOnts =+                              Seq.empty+                          -- use rule "Order.ag"(line 471, column 40)+                          _lhsOsinglevisits =+                              []+                          -- use rule "Order.ag"(line 492, column 38)+                          _lhsOterminals =+                              []+                      in  ( _lhsOattributes,_lhsOcollectChildrenSyns,_lhsOerrors,_lhsOfields,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinhs,_lhsOnts,_lhsOsinglevisits,_lhsOterminals))) )+-- Expression --------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         attrs                : [(Name,Name)]+         con                  : Name+         nt                   : Name+      synthesized attributes:+         allRhsVars           : Set (Name,Name)+         copy                 : SELF+         errors               : Seq Error+         textLines            : [String]+         usedAttrs            : [(Name,Name)]+         usedFields           : [Name]+         usedLocals           : [Name]+   alternatives:+      alternative Expression:+         child pos            : {Pos}+         child txt            : {String}+         visit 0:+            local _tup1       : _+            local errors      : _+            local textLines   : _+            local usedAttrs   : _+            local usedLocals  : _+            local usedFields  : _+            local copy        : _+-}+-- cata+sem_Expression :: Expression ->+                  T_Expression+sem_Expression (Expression _pos _txt )  =+    (sem_Expression_Expression _pos _txt )+-- semantic domain+newtype T_Expression = T_Expression (([(Name,Type,Bool)]) ->+                                     ([Name]) ->+                                     ([(Name,Name)]) ->+                                     Name ->+                                     Name ->+                                     ( (Set (Name,Name)),Expression,(Seq Error),([String]),([(Name,Name)]),([Name]),([Name])))+data Inh_Expression = Inh_Expression {allfields_Inh_Expression :: [(Name,Type,Bool)],allnts_Inh_Expression :: [Name],attrs_Inh_Expression :: [(Name,Name)],con_Inh_Expression :: Name,nt_Inh_Expression :: Name}+data Syn_Expression = Syn_Expression {allRhsVars_Syn_Expression :: Set (Name,Name),copy_Syn_Expression :: Expression,errors_Syn_Expression :: Seq Error,textLines_Syn_Expression :: [String],usedAttrs_Syn_Expression :: [(Name,Name)],usedFields_Syn_Expression :: [Name],usedLocals_Syn_Expression :: [Name]}+wrap_Expression (T_Expression sem ) (Inh_Expression _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsInt )  =+    (let ( _lhsOallRhsVars,_lhsOcopy,_lhsOerrors,_lhsOtextLines,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals) =+             (sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsInt )+     in  (Syn_Expression _lhsOallRhsVars _lhsOcopy _lhsOerrors _lhsOtextLines _lhsOusedAttrs _lhsOusedFields _lhsOusedLocals ))+sem_Expression_Expression :: Pos ->+                             String ->+                             T_Expression+sem_Expression_Expression pos_ txt_  =+    (T_Expression (\ _lhsIallfields+                     _lhsIallnts+                     _lhsIattrs+                     _lhsIcon+                     _lhsInt ->+                       (let _lhsOallRhsVars :: (Set (Name,Name))+                            _lhsOcopy :: Expression+                            _lhsOerrors :: (Seq Error)+                            _lhsOtextLines :: ([String])+                            _lhsOusedAttrs :: ([(Name,Name)])+                            _lhsOusedFields :: ([Name])+                            _lhsOusedLocals :: ([Name])+                            -- "Order.ag"(line 330, column 21)+                            __tup1 =+                                let inherited = Inh_HsTokensRoot+                                                { attrs_Inh_HsTokensRoot      = _lhsIattrs+                                                , con_Inh_HsTokensRoot        = _lhsIcon+                                                , allfields_Inh_HsTokensRoot  = _lhsIallfields+                                                , allnts_Inh_HsTokensRoot     = _lhsIallnts+                                                , nt_Inh_HsTokensRoot         = _lhsInt+                                                }+                                    pos' = case pos_ of+                                             Pos l k f -> Pos l 1 f+                                    synthesized = wrap_HsTokensRoot (sem_HsTokensRoot (HsTokensRoot $ lexTokens pos' txt_)) inherited+                                in case synthesized of+                                     Syn_HsTokensRoot+                                      { errors_Syn_HsTokensRoot     = errors+                                      , textLines_Syn_HsTokensRoot  = textLines+                                      , usedAttrs_Syn_HsTokensRoot  = usedAttrs+                                      , usedLocals_Syn_HsTokensRoot = usedLocals+                                      , usedFields_Syn_HsTokensRoot = usedFields+                                      }  -> (errors,textLines,usedAttrs,usedLocals,usedFields)+                            -- "Order.ag"(line 330, column 21)+                            (_errors,_,_,_,_) =+                                __tup1+                            -- "Order.ag"(line 330, column 21)+                            (_,_textLines,_,_,_) =+                                __tup1+                            -- "Order.ag"(line 330, column 21)+                            (_,_,_usedAttrs,_,_) =+                                __tup1+                            -- "Order.ag"(line 330, column 21)+                            (_,_,_,_usedLocals,_) =+                                __tup1+                            -- "Order.ag"(line 330, column 21)+                            (_,_,_,_,_usedFields) =+                                __tup1+                            -- "Order.ag"(line 351, column 17)+                            _lhsOallRhsVars =+                                Set.fromList _usedAttrs+                                `Set.union`+                                Set.fromList [ (_LOC, l) | l <- _usedLocals    ]+                                `Set.union`+                                Set.fromList [ (_FIELD, fld) | fld <- _usedFields    ]+                            -- self rule+                            _copy =+                                Expression pos_ txt_+                            -- self rule+                            _lhsOcopy =+                                _copy+                            -- copy rule (from local)+                            _lhsOerrors =+                                _errors+                            -- copy rule (from local)+                            _lhsOtextLines =+                                _textLines+                            -- copy rule (from local)+                            _lhsOusedAttrs =+                                _usedAttrs+                            -- copy rule (from local)+                            _lhsOusedFields =+                                _usedFields+                            -- copy rule (from local)+                            _lhsOusedLocals =+                                _usedLocals+                        in  ( _lhsOallRhsVars,_lhsOcopy,_lhsOerrors,_lhsOtextLines,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))) )+-- Grammar -----------------------------------------------------+{-+   visit 0:+      inherited attribute:+         options              : Options+      synthesized attributes:+         errors               : Seq Error+         output               : CGrammar+   alternatives:+      alternative Grammar:+         child typeSyns       : {TypeSyns}+         child useMap         : {UseMap}+         child derivings      : {Derivings}+         child wrappers       : {Set Nonterminal}+         child prods          : Productions+         child pragmas        : {PragmaMap}+         child manualAttrOrderMap : {AttrOrderMap}+         visit 0:+            local ruleTable   : _+            local attrTable   : _+            local attrVertex  : _+            local tdpToTds    : _+            local tdsToTdp    : _+            local directDep   : _+            local instDep     : _+            local info        : _+            local _tup2       : _+            local cInterfaceMap : _+            local cVisitsMap  : _+            local cyclesErrors : _+-}+-- cata+sem_Grammar :: Grammar ->+               T_Grammar+sem_Grammar (Grammar _typeSyns _useMap _derivings _wrappers _prods _pragmas _manualAttrOrderMap )  =+    (sem_Grammar_Grammar _typeSyns _useMap _derivings _wrappers (sem_Productions _prods ) _pragmas _manualAttrOrderMap )+-- semantic domain+newtype T_Grammar = T_Grammar (Options ->+                               ( (Seq Error),CGrammar))+data Inh_Grammar = Inh_Grammar {options_Inh_Grammar :: Options}+data Syn_Grammar = Syn_Grammar {errors_Syn_Grammar :: Seq Error,output_Syn_Grammar :: CGrammar}+wrap_Grammar (T_Grammar sem ) (Inh_Grammar _lhsIoptions )  =+    (let ( _lhsOerrors,_lhsOoutput) =+             (sem _lhsIoptions )+     in  (Syn_Grammar _lhsOerrors _lhsOoutput ))+sem_Grammar_Grammar :: TypeSyns ->+                       UseMap ->+                       Derivings ->+                       (Set Nonterminal) ->+                       T_Productions ->+                       PragmaMap ->+                       AttrOrderMap ->+                       T_Grammar+sem_Grammar_Grammar typeSyns_ useMap_ derivings_ wrappers_ (T_Productions prods_ ) pragmas_ manualAttrOrderMap_  =+    (T_Grammar (\ _lhsIoptions ->+                    (let _prodsOo_cata :: Bool+                         _prodsOo_data :: Bool+                         _prodsOo_sig :: Bool+                         _prodsOo_sem :: Bool+                         _prodsOo_rename :: Bool+                         _prodsOo_newtypes :: Bool+                         _prodsOo_wantvisit :: Bool+                         _prodsOo_dovisit :: Bool+                         _prodsOo_unbox :: Bool+                         _prodsOo_case :: Bool+                         _prodsOprefix :: String+                         _prodsOvcount :: Int+                         _prodsOmanualAttrDepMap :: AttrOrderMap+                         _prodsOacount :: Int+                         _lhsOerrors :: (Seq Error)+                         _lhsOoutput :: CGrammar+                         _prodsOallnts :: ([Name])+                         _prodsOcInterfaceMap :: CInterfaceMap+                         _prodsOcVisitsMap :: CVisitsMap+                         _prodsIacount :: Int+                         _prodsIadditionalDep :: (Seq Edge)+                         _prodsIaranges :: (Seq (Int,Int,Int))+                         _prodsIcProductions :: CProductions+                         _prodsIdirectDep :: (Seq Edge)+                         _prodsIerrors :: (Seq Error)+                         _prodsIinstDep :: (Seq Edge)+                         _prodsIntattrs :: (Seq (Vertex,NTAttr))+                         _prodsIprods :: ([(Nonterminal,[Constructor])])+                         _prodsIrules :: (Seq (Vertex,CRule))+                         _prodsIvcount :: Int+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_cata =+                             folds     _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_data =+                             dataTypes _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_sig =+                             typeSigs  _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_sem =+                             semfuns   _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_rename =+                             rename    _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_newtypes =+                             newtypes  _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_wantvisit =+                             visit   _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_dovisit =+                             visit     _lhsIoptions && null _cyclesErrors+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_unbox =+                             unbox     _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOo_case =+                             cases     _lhsIoptions+                         -- "Order.ag"(line 99, column 17)+                         _prodsOprefix =+                             prefix    _lhsIoptions+                         -- "Order.ag"(line 236, column 15)+                         _prodsOvcount =+                             0+                         -- "Order.ag"(line 261, column 7)+                         _prodsOmanualAttrDepMap =+                             manualAttrOrderMap_+                         -- "Order.ag"(line 365, column 13)+                         _prodsOacount =+                             0+                         -- "Order.ag"(line 403, column 13)+                         _ruleTable =+                             Array.array (0,_prodsIvcount-1) (Seq.toList _prodsIrules)+                         -- "Order.ag"(line 404, column 13)+                         _attrTable =+                             Array.array (0,_prodsIacount-1) (Seq.toList _prodsIntattrs)+                         -- "Order.ag"(line 405, column 13)+                         _attrVertex =+                             Map.fromList (map swap (Seq.toList _prodsIntattrs))+                         -- "Order.ag"(line 406, column 13)+                         _tdpToTds =+                             [ (s, maybe (-1) (\v -> findWithErr1 "Grammar.tdpToTds" v _attrVertex) (ntattr cr))+                             | (s,cr) <- Seq.toList _prodsIrules]+                         -- "Order.ag"(line 408, column 13)+                         _tdsToTdp =+                             let  eq (_,v) (_,v') = v == v'+                                  conv ((s,v):svs)  | v == -1 = Nothing+                                                    | otherwise = Just (v,s:map fst svs)+                             in mapMaybe conv (eqClasses eq _tdpToTds)+                         -- "Order.ag"(line 412, column 13)+                         _directDep =+                             Seq.toList (_prodsIdirectDep Seq.<> _prodsIadditionalDep)+                         -- "Order.ag"(line 413, column 13)+                         _instDep =+                             Seq.toList _prodsIinstDep+                         -- "Order.ag"(line 414, column 13)+                         _info =+                             let def [] = -1+                                 def (v:vs) = v+                              in Info { tdsToTdp   = Array.array (0,_prodsIacount-1) _tdsToTdp+                                      , tdpToTds   = Array.array (0,_prodsIvcount-1) _tdpToTds+                                      , attrTable  = _attrTable+                                      , ruleTable  = _ruleTable+                                      , lmh        = Seq.toList _prodsIaranges+                                      , prods      = _prodsIprods+                                      , wraps      = wrappers_+                                      }+                         -- "Order.ag"(line 425, column 17)+                         __tup2 =+                             case computeSequential _info _directDep _instDep of+                                          CycleFree    cim cvm   -> ( cim+                                                                    , cvm+                                                                    , []+                                                                    )+                                          LocalCycle   errs      -> ( error "No interfaces for AG with local cycles"+                                                                    , error "No visit sub-sequences for AG with local cycles"+                                                                    , map (localCycleErr _ruleTable (visit _lhsIoptions)) errs+                                                                    )+                                          InstCycle    errs      -> ( error "No interfaces for AG with cycles through insts"+                                                                    , error "No visit sub-sequences for AG with cycles through insts"+                                                                    , map (instCycleErr _ruleTable (visit _lhsIoptions)) errs+                                                                    )+                                          DirectCycle  errs      -> ( error "No interfaces for AG with direct cycles"+                                                                    , error "No visit sub-sequences for AG with direct cycles"+                                                                    , directCycleErrs _attrTable _ruleTable (visit _lhsIoptions) errs+                                                                    )+                                          InducedCycle cim errs ->  ( cim+                                                                    , error "No visit sub-sequences for AG with induced cycles"+                                                                    , inducedCycleErrs _attrTable _ruleTable cim errs+                                                                    )+                         -- "Order.ag"(line 425, column 17)+                         (_cInterfaceMap,_,_) =+                             __tup2+                         -- "Order.ag"(line 425, column 17)+                         (_,_cVisitsMap,_) =+                             __tup2+                         -- "Order.ag"(line 425, column 17)+                         (_,_,_cyclesErrors) =+                             __tup2+                         -- "Order.ag"(line 447, column 13)+                         _lhsOerrors =+                             (if withCycle _lhsIoptions then Seq.fromList _cyclesErrors else Seq.empty)+                             Seq.<> _prodsIerrors+                         -- "Order.ag"(line 479, column 15)+                         _lhsOoutput =+                             CGrammar typeSyns_ derivings_ wrappers_ _prodsIcProductions pragmas_+                         -- "Order.ag"(line 506, column 13)+                         _prodsOallnts =+                             map fst (_prodsIprods)+                         -- copy rule (from local)+                         _prodsOcInterfaceMap =+                             _cInterfaceMap+                         -- copy rule (from local)+                         _prodsOcVisitsMap =+                             _cVisitsMap+                         ( _prodsIacount,_prodsIadditionalDep,_prodsIaranges,_prodsIcProductions,_prodsIdirectDep,_prodsIerrors,_prodsIinstDep,_prodsIntattrs,_prodsIprods,_prodsIrules,_prodsIvcount) =+                             (prods_ _prodsOacount _prodsOallnts _prodsOcInterfaceMap _prodsOcVisitsMap _prodsOmanualAttrDepMap _prodsOo_case _prodsOo_cata _prodsOo_data _prodsOo_dovisit _prodsOo_newtypes _prodsOo_rename _prodsOo_sem _prodsOo_sig _prodsOo_unbox _prodsOo_wantvisit _prodsOprefix _prodsOvcount )+                     in  ( _lhsOerrors,_lhsOoutput))) )+-- Pattern -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allTypeSigs          : Map Name Type+         altAttrs             : Map AltAttr Vertex+         con                  : Identifier+         inh                  : Attributes+         nt                   : Identifier+         syn                  : Attributes+      synthesized attributes:+         copy                 : SELF+         errors               : Seq Error+         gathAltAttrs         : [AltAttr]+         instVars             : [Name]+         locVars              : [Name]+         patternAttrs         : [(Name,Name,Bool,Patterns)]+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local copy        : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts )  =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+sem_Pattern (Constr _name _pats )  =+    (sem_Pattern_Constr _name (sem_Patterns _pats ) )+sem_Pattern (Product _pos _pats )  =+    (sem_Pattern_Product _pos (sem_Patterns _pats ) )+sem_Pattern (Underscore _pos )  =+    (sem_Pattern_Underscore _pos )+-- semantic domain+newtype T_Pattern = T_Pattern ((Map Name Type) ->+                               (Map AltAttr Vertex) ->+                               Identifier ->+                               Attributes ->+                               Identifier ->+                               Attributes ->+                               ( Pattern,(Seq Error),([AltAttr]),([Name]),([Name]),([(Name,Name,Bool,Patterns)])))+data Inh_Pattern = Inh_Pattern {allTypeSigs_Inh_Pattern :: Map Name Type,altAttrs_Inh_Pattern :: Map AltAttr Vertex,con_Inh_Pattern :: Identifier,inh_Inh_Pattern :: Attributes,nt_Inh_Pattern :: Identifier,syn_Inh_Pattern :: Attributes}+data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: Pattern,errors_Syn_Pattern :: Seq Error,gathAltAttrs_Syn_Pattern :: [AltAttr],instVars_Syn_Pattern :: [Name],locVars_Syn_Pattern :: [Name],patternAttrs_Syn_Pattern :: [(Name,Name,Bool,Patterns)]}+wrap_Pattern (T_Pattern sem ) (Inh_Pattern _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn )  =+    (let ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs) =+             (sem _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn )+     in  (Syn_Pattern _lhsOcopy _lhsOerrors _lhsOgathAltAttrs _lhsOinstVars _lhsOlocVars _lhsOpatternAttrs ))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ )  =+    (T_Pattern (\ _lhsIallTypeSigs+                  _lhsIaltAttrs+                  _lhsIcon+                  _lhsIinh+                  _lhsInt+                  _lhsIsyn ->+                    (let _lhsOgathAltAttrs :: ([AltAttr])+                         _lhsOpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         _lhsOlocVars :: ([Name])+                         _lhsOinstVars :: ([Name])+                         _lhsOerrors :: (Seq Error)+                         _lhsOcopy :: Pattern+                         _patOallTypeSigs :: (Map Name Type)+                         _patOaltAttrs :: (Map AltAttr Vertex)+                         _patOcon :: Identifier+                         _patOinh :: Attributes+                         _patOnt :: Identifier+                         _patOsyn :: Attributes+                         _partsOallTypeSigs :: (Map Name Type)+                         _partsOaltAttrs :: (Map AltAttr Vertex)+                         _partsOcon :: Identifier+                         _partsOinh :: Attributes+                         _partsOnt :: Identifier+                         _partsOsyn :: Attributes+                         _patIcopy :: Pattern+                         _patIerrors :: (Seq Error)+                         _patIgathAltAttrs :: ([AltAttr])+                         _patIinstVars :: ([Name])+                         _patIlocVars :: ([Name])+                         _patIpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         _partsIcopy :: Patterns+                         _partsIerrors :: (Seq Error)+                         _partsIgathAltAttrs :: ([AltAttr])+                         _partsIinstVars :: ([Name])+                         _partsIlocVars :: ([Name])+                         _partsIpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         -- "Order.ag"(line 160, column 12)+                         _lhsOgathAltAttrs =+                             [AltAttr field_ attr_ (field_ == _LOC || field_ == _INST)]+                         -- "Order.ag"(line 227, column 12)+                         _lhsOpatternAttrs =+                             [(field_,attr_,(field_ == _LOC || field_ == _INST),_partsIcopy)]+                         -- "Order.ag"(line 536, column 14)+                         _lhsOlocVars =+                             if field_ == _LOC+                                then [attr_]+                                else []+                         -- "Order.ag"(line 539, column 14)+                         _lhsOinstVars =+                             if field_ == _INST+                                then [attr_]+                                else []+                         -- use rule "Order.ag"(line 60, column 70)+                         _lhsOerrors =+                             _patIerrors Seq.<> _partsIerrors+                         -- self rule+                         _copy =+                             Alias field_ attr_ _patIcopy _partsIcopy+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- copy rule (down)+                         _patOallTypeSigs =+                             _lhsIallTypeSigs+                         -- copy rule (down)+                         _patOaltAttrs =+                             _lhsIaltAttrs+                         -- copy rule (down)+                         _patOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patOinh =+                             _lhsIinh+                         -- copy rule (down)+                         _patOnt =+                             _lhsInt+                         -- copy rule (down)+                         _patOsyn =+                             _lhsIsyn+                         -- copy rule (down)+                         _partsOallTypeSigs =+                             _lhsIallTypeSigs+                         -- copy rule (down)+                         _partsOaltAttrs =+                             _lhsIaltAttrs+                         -- copy rule (down)+                         _partsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _partsOinh =+                             _lhsIinh+                         -- copy rule (down)+                         _partsOnt =+                             _lhsInt+                         -- copy rule (down)+                         _partsOsyn =+                             _lhsIsyn+                         ( _patIcopy,_patIerrors,_patIgathAltAttrs,_patIinstVars,_patIlocVars,_patIpatternAttrs) =+                             (pat_ _patOallTypeSigs _patOaltAttrs _patOcon _patOinh _patOnt _patOsyn )+                         ( _partsIcopy,_partsIerrors,_partsIgathAltAttrs,_partsIinstVars,_partsIlocVars,_partsIpatternAttrs) =+                             (parts_ _partsOallTypeSigs _partsOaltAttrs _partsOcon _partsOinh _partsOnt _partsOsyn )+                     in  ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))) )+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIallTypeSigs+                  _lhsIaltAttrs+                  _lhsIcon+                  _lhsIinh+                  _lhsInt+                  _lhsIsyn ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOgathAltAttrs :: ([AltAttr])+                         _lhsOinstVars :: ([Name])+                         _lhsOlocVars :: ([Name])+                         _lhsOpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         _lhsOcopy :: Pattern+                         _patsOallTypeSigs :: (Map Name Type)+                         _patsOaltAttrs :: (Map AltAttr Vertex)+                         _patsOcon :: Identifier+                         _patsOinh :: Attributes+                         _patsOnt :: Identifier+                         _patsOsyn :: Attributes+                         _patsIcopy :: Patterns+                         _patsIerrors :: (Seq Error)+                         _patsIgathAltAttrs :: ([AltAttr])+                         _patsIinstVars :: ([Name])+                         _patsIlocVars :: ([Name])+                         _patsIpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         -- use rule "Order.ag"(line 60, column 70)+                         _lhsOerrors =+                             _patsIerrors+                         -- use rule "Order.ag"(line 146, column 68)+                         _lhsOgathAltAttrs =+                             _patsIgathAltAttrs+                         -- use rule "Order.ag"(line 533, column 80)+                         _lhsOinstVars =+                             _patsIinstVars+                         -- use rule "Order.ag"(line 533, column 48)+                         _lhsOlocVars =+                             _patsIlocVars+                         -- use rule "Order.ag"(line 224, column 42)+                         _lhsOpatternAttrs =+                             _patsIpatternAttrs+                         -- self rule+                         _copy =+                             Constr name_ _patsIcopy+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- copy rule (down)+                         _patsOallTypeSigs =+                             _lhsIallTypeSigs+                         -- copy rule (down)+                         _patsOaltAttrs =+                             _lhsIaltAttrs+                         -- copy rule (down)+                         _patsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patsOinh =+                             _lhsIinh+                         -- copy rule (down)+                         _patsOnt =+                             _lhsInt+                         -- copy rule (down)+                         _patsOsyn =+                             _lhsIsyn+                         ( _patsIcopy,_patsIerrors,_patsIgathAltAttrs,_patsIinstVars,_patsIlocVars,_patsIpatternAttrs) =+                             (pats_ _patsOallTypeSigs _patsOaltAttrs _patsOcon _patsOinh _patsOnt _patsOsyn )+                     in  ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))) )+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIallTypeSigs+                  _lhsIaltAttrs+                  _lhsIcon+                  _lhsIinh+                  _lhsInt+                  _lhsIsyn ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOgathAltAttrs :: ([AltAttr])+                         _lhsOinstVars :: ([Name])+                         _lhsOlocVars :: ([Name])+                         _lhsOpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         _lhsOcopy :: Pattern+                         _patsOallTypeSigs :: (Map Name Type)+                         _patsOaltAttrs :: (Map AltAttr Vertex)+                         _patsOcon :: Identifier+                         _patsOinh :: Attributes+                         _patsOnt :: Identifier+                         _patsOsyn :: Attributes+                         _patsIcopy :: Patterns+                         _patsIerrors :: (Seq Error)+                         _patsIgathAltAttrs :: ([AltAttr])+                         _patsIinstVars :: ([Name])+                         _patsIlocVars :: ([Name])+                         _patsIpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         -- use rule "Order.ag"(line 60, column 70)+                         _lhsOerrors =+                             _patsIerrors+                         -- use rule "Order.ag"(line 146, column 68)+                         _lhsOgathAltAttrs =+                             _patsIgathAltAttrs+                         -- use rule "Order.ag"(line 533, column 80)+                         _lhsOinstVars =+                             _patsIinstVars+                         -- use rule "Order.ag"(line 533, column 48)+                         _lhsOlocVars =+                             _patsIlocVars+                         -- use rule "Order.ag"(line 224, column 42)+                         _lhsOpatternAttrs =+                             _patsIpatternAttrs+                         -- self rule+                         _copy =+                             Product pos_ _patsIcopy+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- copy rule (down)+                         _patsOallTypeSigs =+                             _lhsIallTypeSigs+                         -- copy rule (down)+                         _patsOaltAttrs =+                             _lhsIaltAttrs+                         -- copy rule (down)+                         _patsOcon =+                             _lhsIcon+                         -- copy rule (down)+                         _patsOinh =+                             _lhsIinh+                         -- copy rule (down)+                         _patsOnt =+                             _lhsInt+                         -- copy rule (down)+                         _patsOsyn =+                             _lhsIsyn+                         ( _patsIcopy,_patsIerrors,_patsIgathAltAttrs,_patsIinstVars,_patsIlocVars,_patsIpatternAttrs) =+                             (pats_ _patsOallTypeSigs _patsOaltAttrs _patsOcon _patsOinh _patsOnt _patsOsyn )+                     in  ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))) )+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_  =+    (T_Pattern (\ _lhsIallTypeSigs+                  _lhsIaltAttrs+                  _lhsIcon+                  _lhsIinh+                  _lhsInt+                  _lhsIsyn ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOgathAltAttrs :: ([AltAttr])+                         _lhsOinstVars :: ([Name])+                         _lhsOlocVars :: ([Name])+                         _lhsOpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                         _lhsOcopy :: Pattern+                         -- use rule "Order.ag"(line 60, column 70)+                         _lhsOerrors =+                             Seq.empty+                         -- use rule "Order.ag"(line 146, column 68)+                         _lhsOgathAltAttrs =+                             []+                         -- use rule "Order.ag"(line 533, column 80)+                         _lhsOinstVars =+                             []+                         -- use rule "Order.ag"(line 533, column 48)+                         _lhsOlocVars =+                             []+                         -- use rule "Order.ag"(line 224, column 42)+                         _lhsOpatternAttrs =+                             []+                         -- self rule+                         _copy =+                             Underscore pos_+                         -- self rule+                         _lhsOcopy =+                             _copy+                     in  ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))) )+-- Patterns ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allTypeSigs          : Map Name Type+         altAttrs             : Map AltAttr Vertex+         con                  : Identifier+         inh                  : Attributes+         nt                   : Identifier+         syn                  : Attributes+      synthesized attributes:+         copy                 : SELF+         errors               : Seq Error+         gathAltAttrs         : [AltAttr]+         instVars             : [Name]+         locVars              : [Name]+         patternAttrs         : [(Name,Name,Bool,Patterns)]+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+      alternative Nil:+         visit 0:+            local copy        : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list  =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns ((Map Name Type) ->+                                 (Map AltAttr Vertex) ->+                                 Identifier ->+                                 Attributes ->+                                 Identifier ->+                                 Attributes ->+                                 ( Patterns,(Seq Error),([AltAttr]),([Name]),([Name]),([(Name,Name,Bool,Patterns)])))+data Inh_Patterns = Inh_Patterns {allTypeSigs_Inh_Patterns :: Map Name Type,altAttrs_Inh_Patterns :: Map AltAttr Vertex,con_Inh_Patterns :: Identifier,inh_Inh_Patterns :: Attributes,nt_Inh_Patterns :: Identifier,syn_Inh_Patterns :: Attributes}+data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: Patterns,errors_Syn_Patterns :: Seq Error,gathAltAttrs_Syn_Patterns :: [AltAttr],instVars_Syn_Patterns :: [Name],locVars_Syn_Patterns :: [Name],patternAttrs_Syn_Patterns :: [(Name,Name,Bool,Patterns)]}+wrap_Patterns (T_Patterns sem ) (Inh_Patterns _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn )  =+    (let ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs) =+             (sem _lhsIallTypeSigs _lhsIaltAttrs _lhsIcon _lhsIinh _lhsInt _lhsIsyn )+     in  (Syn_Patterns _lhsOcopy _lhsOerrors _lhsOgathAltAttrs _lhsOinstVars _lhsOlocVars _lhsOpatternAttrs ))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =+    (T_Patterns (\ _lhsIallTypeSigs+                   _lhsIaltAttrs+                   _lhsIcon+                   _lhsIinh+                   _lhsInt+                   _lhsIsyn ->+                     (let _lhsOerrors :: (Seq Error)+                          _lhsOgathAltAttrs :: ([AltAttr])+                          _lhsOinstVars :: ([Name])+                          _lhsOlocVars :: ([Name])+                          _lhsOpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                          _lhsOcopy :: Patterns+                          _hdOallTypeSigs :: (Map Name Type)+                          _hdOaltAttrs :: (Map AltAttr Vertex)+                          _hdOcon :: Identifier+                          _hdOinh :: Attributes+                          _hdOnt :: Identifier+                          _hdOsyn :: Attributes+                          _tlOallTypeSigs :: (Map Name Type)+                          _tlOaltAttrs :: (Map AltAttr Vertex)+                          _tlOcon :: Identifier+                          _tlOinh :: Attributes+                          _tlOnt :: Identifier+                          _tlOsyn :: Attributes+                          _hdIcopy :: Pattern+                          _hdIerrors :: (Seq Error)+                          _hdIgathAltAttrs :: ([AltAttr])+                          _hdIinstVars :: ([Name])+                          _hdIlocVars :: ([Name])+                          _hdIpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                          _tlIcopy :: Patterns+                          _tlIerrors :: (Seq Error)+                          _tlIgathAltAttrs :: ([AltAttr])+                          _tlIinstVars :: ([Name])+                          _tlIlocVars :: ([Name])+                          _tlIpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                          -- use rule "Order.ag"(line 60, column 70)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- use rule "Order.ag"(line 146, column 68)+                          _lhsOgathAltAttrs =+                              _hdIgathAltAttrs ++ _tlIgathAltAttrs+                          -- use rule "Order.ag"(line 533, column 80)+                          _lhsOinstVars =+                              _hdIinstVars ++ _tlIinstVars+                          -- use rule "Order.ag"(line 533, column 48)+                          _lhsOlocVars =+                              _hdIlocVars ++ _tlIlocVars+                          -- use rule "Order.ag"(line 224, column 42)+                          _lhsOpatternAttrs =+                              _hdIpatternAttrs ++ _tlIpatternAttrs+                          -- self rule+                          _copy =+                              (:) _hdIcopy _tlIcopy+                          -- self rule+                          _lhsOcopy =+                              _copy+                          -- copy rule (down)+                          _hdOallTypeSigs =+                              _lhsIallTypeSigs+                          -- copy rule (down)+                          _hdOaltAttrs =+                              _lhsIaltAttrs+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOinh =+                              _lhsIinh+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (down)+                          _hdOsyn =+                              _lhsIsyn+                          -- copy rule (down)+                          _tlOallTypeSigs =+                              _lhsIallTypeSigs+                          -- copy rule (down)+                          _tlOaltAttrs =+                              _lhsIaltAttrs+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _tlOinh =+                              _lhsIinh+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          -- copy rule (down)+                          _tlOsyn =+                              _lhsIsyn+                          ( _hdIcopy,_hdIerrors,_hdIgathAltAttrs,_hdIinstVars,_hdIlocVars,_hdIpatternAttrs) =+                              (hd_ _hdOallTypeSigs _hdOaltAttrs _hdOcon _hdOinh _hdOnt _hdOsyn )+                          ( _tlIcopy,_tlIerrors,_tlIgathAltAttrs,_tlIinstVars,_tlIlocVars,_tlIpatternAttrs) =+                              (tl_ _tlOallTypeSigs _tlOaltAttrs _tlOcon _tlOinh _tlOnt _tlOsyn )+                      in  ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))) )+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (\ _lhsIallTypeSigs+                   _lhsIaltAttrs+                   _lhsIcon+                   _lhsIinh+                   _lhsInt+                   _lhsIsyn ->+                     (let _lhsOerrors :: (Seq Error)+                          _lhsOgathAltAttrs :: ([AltAttr])+                          _lhsOinstVars :: ([Name])+                          _lhsOlocVars :: ([Name])+                          _lhsOpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                          _lhsOcopy :: Patterns+                          -- use rule "Order.ag"(line 60, column 70)+                          _lhsOerrors =+                              Seq.empty+                          -- use rule "Order.ag"(line 146, column 68)+                          _lhsOgathAltAttrs =+                              []+                          -- use rule "Order.ag"(line 533, column 80)+                          _lhsOinstVars =+                              []+                          -- use rule "Order.ag"(line 533, column 48)+                          _lhsOlocVars =+                              []+                          -- use rule "Order.ag"(line 224, column 42)+                          _lhsOpatternAttrs =+                              []+                          -- self rule+                          _copy =+                              []+                          -- self rule+                          _lhsOcopy =+                              _copy+                      in  ( _lhsOcopy,_lhsOerrors,_lhsOgathAltAttrs,_lhsOinstVars,_lhsOlocVars,_lhsOpatternAttrs))) )+-- Production --------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allnts               : [Name]+         cInterfaceMap        : CInterfaceMap+         cVisitsMap           : CVisitsMap+         manualAttrDepMap     : AttrOrderMap+         o_case               : Bool+         o_cata               : Bool+         o_data               : Bool+         o_dovisit            : Bool+         o_newtypes           : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_unbox              : Bool+         o_wantvisit          : Bool+         prefix               : String+      chained attributes:+         acount               : Int+         vcount               : Int+      synthesized attributes:+         additionalDep        : Seq Edge+         aranges              : Seq (Int,Int,Int)+         cProduction          : CProduction+         directDep            : Seq Edge+         errors               : Seq Error+         instDep              : Seq Edge+         ntattrs              : Seq (Vertex,NTAttr)+         prods                : [(Nonterminal,[Constructor])]+         rules                : Seq (Vertex,CRule)+   alternatives:+      alternative Production:+         child nt             : {Nonterminal}+         child inh            : {Attributes}+         child syn            : {Attributes}+         child alts           : Alternatives+         visit 0:+            local ntattrs     : _+            local cInter      : _+-}+-- cata+sem_Production :: Production ->+                  T_Production+sem_Production (Production _nt _inh _syn _alts )  =+    (sem_Production_Production _nt _inh _syn (sem_Alternatives _alts ) )+-- semantic domain+newtype T_Production = T_Production (Int ->+                                     ([Name]) ->+                                     CInterfaceMap ->+                                     CVisitsMap ->+                                     AttrOrderMap ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     Bool ->+                                     String ->+                                     Int ->+                                     ( Int,(Seq Edge),(Seq (Int,Int,Int)),CProduction,(Seq Edge),(Seq Error),(Seq Edge),(Seq (Vertex,NTAttr)),([(Nonterminal,[Constructor])]),(Seq (Vertex,CRule)),Int))+data Inh_Production = Inh_Production {acount_Inh_Production :: Int,allnts_Inh_Production :: [Name],cInterfaceMap_Inh_Production :: CInterfaceMap,cVisitsMap_Inh_Production :: CVisitsMap,manualAttrDepMap_Inh_Production :: AttrOrderMap,o_case_Inh_Production :: Bool,o_cata_Inh_Production :: Bool,o_data_Inh_Production :: Bool,o_dovisit_Inh_Production :: Bool,o_newtypes_Inh_Production :: Bool,o_rename_Inh_Production :: Bool,o_sem_Inh_Production :: Bool,o_sig_Inh_Production :: Bool,o_unbox_Inh_Production :: Bool,o_wantvisit_Inh_Production :: Bool,prefix_Inh_Production :: String,vcount_Inh_Production :: Int}+data Syn_Production = Syn_Production {acount_Syn_Production :: Int,additionalDep_Syn_Production :: Seq Edge,aranges_Syn_Production :: Seq (Int,Int,Int),cProduction_Syn_Production :: CProduction,directDep_Syn_Production :: Seq Edge,errors_Syn_Production :: Seq Error,instDep_Syn_Production :: Seq Edge,ntattrs_Syn_Production :: Seq (Vertex,NTAttr),prods_Syn_Production :: [(Nonterminal,[Constructor])],rules_Syn_Production :: Seq (Vertex,CRule),vcount_Syn_Production :: Int}+wrap_Production (T_Production sem ) (Inh_Production _lhsIacount _lhsIallnts _lhsIcInterfaceMap _lhsIcVisitsMap _lhsImanualAttrDepMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIvcount )  =+    (let ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOcProduction,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOntattrs,_lhsOprods,_lhsOrules,_lhsOvcount) =+             (sem _lhsIacount _lhsIallnts _lhsIcInterfaceMap _lhsIcVisitsMap _lhsImanualAttrDepMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIvcount )+     in  (Syn_Production _lhsOacount _lhsOadditionalDep _lhsOaranges _lhsOcProduction _lhsOdirectDep _lhsOerrors _lhsOinstDep _lhsOntattrs _lhsOprods _lhsOrules _lhsOvcount ))+sem_Production_Production :: Nonterminal ->+                             Attributes ->+                             Attributes ->+                             T_Alternatives ->+                             T_Production+sem_Production_Production nt_ inh_ syn_ (T_Alternatives alts_ )  =+    (T_Production (\ _lhsIacount+                     _lhsIallnts+                     _lhsIcInterfaceMap+                     _lhsIcVisitsMap+                     _lhsImanualAttrDepMap+                     _lhsIo_case+                     _lhsIo_cata+                     _lhsIo_data+                     _lhsIo_dovisit+                     _lhsIo_newtypes+                     _lhsIo_rename+                     _lhsIo_sem+                     _lhsIo_sig+                     _lhsIo_unbox+                     _lhsIo_wantvisit+                     _lhsIprefix+                     _lhsIvcount ->+                       (let _altsOnt :: Identifier+                            _altsOinh :: Attributes+                            _altsOsyn :: Attributes+                            _lhsOntattrs :: (Seq (Vertex,NTAttr))+                            _lhsOacount :: Int+                            _lhsOaranges :: (Seq (Int,Int,Int))+                            _lhsOprods :: ([(Nonterminal,[Constructor])])+                            _lhsOcProduction :: CProduction+                            _lhsOadditionalDep :: (Seq Edge)+                            _lhsOdirectDep :: (Seq Edge)+                            _lhsOerrors :: (Seq Error)+                            _lhsOinstDep :: (Seq Edge)+                            _lhsOrules :: (Seq (Vertex,CRule))+                            _lhsOvcount :: Int+                            _altsOallnts :: ([Name])+                            _altsOcVisitsMap :: CVisitsMap+                            _altsOmanualAttrDepMap :: AttrOrderMap+                            _altsOo_case :: Bool+                            _altsOo_cata :: Bool+                            _altsOo_dovisit :: Bool+                            _altsOo_newtypes :: Bool+                            _altsOo_rename :: Bool+                            _altsOo_sem :: Bool+                            _altsOo_sig :: Bool+                            _altsOo_unbox :: Bool+                            _altsOo_wantvisit :: Bool+                            _altsOprefix :: String+                            _altsOvcount :: Int+                            _altsIadditionalDep :: (Seq Edge)+                            _altsIcAlternatives :: CAlternatives+                            _altsIcons :: ([Constructor])+                            _altsIdirectDep :: (Seq Edge)+                            _altsIerrors :: (Seq Error)+                            _altsIinstDep :: (Seq Edge)+                            _altsIrules :: (Seq (Vertex,CRule))+                            _altsIvcount :: Int+                            -- "Order.ag"(line 73, column 16)+                            _altsOnt =+                                nt_+                            -- "Order.ag"(line 76, column 16)+                            _altsOinh =+                                inh_+                            -- "Order.ag"(line 77, column 16)+                            _altsOsyn =+                                syn_+                            -- "Order.ag"(line 368, column 16)+                            _ntattrs =+                                [ NTAInh nt_ inh tp | (inh,tp) <- Map.assocs inh_ ]+                                ++ [NTASyn nt_ syn tp | (syn,tp) <- Map.assocs syn_ ]+                            -- "Order.ag"(line 370, column 16)+                            _lhsOntattrs =+                                Seq.fromList (zip [_lhsIacount ..] _ntattrs)+                            -- "Order.ag"(line 371, column 16)+                            _lhsOacount =+                                _lhsIacount + Map.size inh_ + Map.size syn_+                            -- "Order.ag"(line 372, column 16)+                            _lhsOaranges =+                                Seq.single+                                  (_lhsIacount+                                  ,_lhsIacount + Map.size inh_+                                  ,_lhsIacount + Map.size syn_ + Map.size inh_ - 1)+                            -- "Order.ag"(line 381, column 18)+                            _lhsOprods =+                                [(nt_,_altsIcons)]+                            -- "Order.ag"(line 456, column 18)+                            _cInter =+                                if  _lhsIo_dovisit+                                        then findWithErr1 "Production.cInter" nt_ _lhsIcInterfaceMap+                                        else CInterface [CSegment inh_ syn_]+                            -- "Order.ag"(line 484, column 18)+                            _lhsOcProduction =+                                CProduction nt_ inh_ syn_ _altsIcAlternatives _cInter+                            -- use rule "Order.ag"(line 258, column 71)+                            _lhsOadditionalDep =+                                _altsIadditionalDep+                            -- use rule "Order.ag"(line 244, column 33)+                            _lhsOdirectDep =+                                _altsIdirectDep+                            -- use rule "Order.ag"(line 60, column 70)+                            _lhsOerrors =+                                _altsIerrors+                            -- use rule "Order.ag"(line 289, column 31)+                            _lhsOinstDep =+                                _altsIinstDep+                            -- use rule "Order.ag"(line 234, column 18)+                            _lhsOrules =+                                _altsIrules+                            -- copy rule (up)+                            _lhsOvcount =+                                _altsIvcount+                            -- copy rule (down)+                            _altsOallnts =+                                _lhsIallnts+                            -- copy rule (down)+                            _altsOcVisitsMap =+                                _lhsIcVisitsMap+                            -- copy rule (down)+                            _altsOmanualAttrDepMap =+                                _lhsImanualAttrDepMap+                            -- copy rule (down)+                            _altsOo_case =+                                _lhsIo_case+                            -- copy rule (down)+                            _altsOo_cata =+                                _lhsIo_cata+                            -- copy rule (down)+                            _altsOo_dovisit =+                                _lhsIo_dovisit+                            -- copy rule (down)+                            _altsOo_newtypes =+                                _lhsIo_newtypes+                            -- copy rule (down)+                            _altsOo_rename =+                                _lhsIo_rename+                            -- copy rule (down)+                            _altsOo_sem =+                                _lhsIo_sem+                            -- copy rule (down)+                            _altsOo_sig =+                                _lhsIo_sig+                            -- copy rule (down)+                            _altsOo_unbox =+                                _lhsIo_unbox+                            -- copy rule (down)+                            _altsOo_wantvisit =+                                _lhsIo_wantvisit+                            -- copy rule (down)+                            _altsOprefix =+                                _lhsIprefix+                            -- copy rule (down)+                            _altsOvcount =+                                _lhsIvcount+                            ( _altsIadditionalDep,_altsIcAlternatives,_altsIcons,_altsIdirectDep,_altsIerrors,_altsIinstDep,_altsIrules,_altsIvcount) =+                                (alts_ _altsOallnts _altsOcVisitsMap _altsOinh _altsOmanualAttrDepMap _altsOnt _altsOo_case _altsOo_cata _altsOo_dovisit _altsOo_newtypes _altsOo_rename _altsOo_sem _altsOo_sig _altsOo_unbox _altsOo_wantvisit _altsOprefix _altsOsyn _altsOvcount )+                        in  ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOcProduction,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOntattrs,_lhsOprods,_lhsOrules,_lhsOvcount))) )+-- Productions -------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allnts               : [Name]+         cInterfaceMap        : CInterfaceMap+         cVisitsMap           : CVisitsMap+         manualAttrDepMap     : AttrOrderMap+         o_case               : Bool+         o_cata               : Bool+         o_data               : Bool+         o_dovisit            : Bool+         o_newtypes           : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_unbox              : Bool+         o_wantvisit          : Bool+         prefix               : String+      chained attributes:+         acount               : Int+         vcount               : Int+      synthesized attributes:+         additionalDep        : Seq Edge+         aranges              : Seq (Int,Int,Int)+         cProductions         : CProductions+         directDep            : Seq Edge+         errors               : Seq Error+         instDep              : Seq Edge+         ntattrs              : Seq (Vertex,NTAttr)+         prods                : [(Nonterminal,[Constructor])]+         rules                : Seq (Vertex,CRule)+   alternatives:+      alternative Cons:+         child hd             : Production+         child tl             : Productions+      alternative Nil:+-}+-- cata+sem_Productions :: Productions ->+                   T_Productions+sem_Productions list  =+    (Prelude.foldr sem_Productions_Cons sem_Productions_Nil (Prelude.map sem_Production list) )+-- semantic domain+newtype T_Productions = T_Productions (Int ->+                                       ([Name]) ->+                                       CInterfaceMap ->+                                       CVisitsMap ->+                                       AttrOrderMap ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       Bool ->+                                       String ->+                                       Int ->+                                       ( Int,(Seq Edge),(Seq (Int,Int,Int)),CProductions,(Seq Edge),(Seq Error),(Seq Edge),(Seq (Vertex,NTAttr)),([(Nonterminal,[Constructor])]),(Seq (Vertex,CRule)),Int))+data Inh_Productions = Inh_Productions {acount_Inh_Productions :: Int,allnts_Inh_Productions :: [Name],cInterfaceMap_Inh_Productions :: CInterfaceMap,cVisitsMap_Inh_Productions :: CVisitsMap,manualAttrDepMap_Inh_Productions :: AttrOrderMap,o_case_Inh_Productions :: Bool,o_cata_Inh_Productions :: Bool,o_data_Inh_Productions :: Bool,o_dovisit_Inh_Productions :: Bool,o_newtypes_Inh_Productions :: Bool,o_rename_Inh_Productions :: Bool,o_sem_Inh_Productions :: Bool,o_sig_Inh_Productions :: Bool,o_unbox_Inh_Productions :: Bool,o_wantvisit_Inh_Productions :: Bool,prefix_Inh_Productions :: String,vcount_Inh_Productions :: Int}+data Syn_Productions = Syn_Productions {acount_Syn_Productions :: Int,additionalDep_Syn_Productions :: Seq Edge,aranges_Syn_Productions :: Seq (Int,Int,Int),cProductions_Syn_Productions :: CProductions,directDep_Syn_Productions :: Seq Edge,errors_Syn_Productions :: Seq Error,instDep_Syn_Productions :: Seq Edge,ntattrs_Syn_Productions :: Seq (Vertex,NTAttr),prods_Syn_Productions :: [(Nonterminal,[Constructor])],rules_Syn_Productions :: Seq (Vertex,CRule),vcount_Syn_Productions :: Int}+wrap_Productions (T_Productions sem ) (Inh_Productions _lhsIacount _lhsIallnts _lhsIcInterfaceMap _lhsIcVisitsMap _lhsImanualAttrDepMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIvcount )  =+    (let ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOcProductions,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOntattrs,_lhsOprods,_lhsOrules,_lhsOvcount) =+             (sem _lhsIacount _lhsIallnts _lhsIcInterfaceMap _lhsIcVisitsMap _lhsImanualAttrDepMap _lhsIo_case _lhsIo_cata _lhsIo_data _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_unbox _lhsIo_wantvisit _lhsIprefix _lhsIvcount )+     in  (Syn_Productions _lhsOacount _lhsOadditionalDep _lhsOaranges _lhsOcProductions _lhsOdirectDep _lhsOerrors _lhsOinstDep _lhsOntattrs _lhsOprods _lhsOrules _lhsOvcount ))+sem_Productions_Cons :: T_Production ->+                        T_Productions ->+                        T_Productions+sem_Productions_Cons (T_Production hd_ ) (T_Productions tl_ )  =+    (T_Productions (\ _lhsIacount+                      _lhsIallnts+                      _lhsIcInterfaceMap+                      _lhsIcVisitsMap+                      _lhsImanualAttrDepMap+                      _lhsIo_case+                      _lhsIo_cata+                      _lhsIo_data+                      _lhsIo_dovisit+                      _lhsIo_newtypes+                      _lhsIo_rename+                      _lhsIo_sem+                      _lhsIo_sig+                      _lhsIo_unbox+                      _lhsIo_wantvisit+                      _lhsIprefix+                      _lhsIvcount ->+                        (let _lhsOcProductions :: CProductions+                             _lhsOadditionalDep :: (Seq Edge)+                             _lhsOaranges :: (Seq (Int,Int,Int))+                             _lhsOdirectDep :: (Seq Edge)+                             _lhsOerrors :: (Seq Error)+                             _lhsOinstDep :: (Seq Edge)+                             _lhsOntattrs :: (Seq (Vertex,NTAttr))+                             _lhsOprods :: ([(Nonterminal,[Constructor])])+                             _lhsOrules :: (Seq (Vertex,CRule))+                             _lhsOacount :: Int+                             _lhsOvcount :: Int+                             _hdOacount :: Int+                             _hdOallnts :: ([Name])+                             _hdOcInterfaceMap :: CInterfaceMap+                             _hdOcVisitsMap :: CVisitsMap+                             _hdOmanualAttrDepMap :: AttrOrderMap+                             _hdOo_case :: Bool+                             _hdOo_cata :: Bool+                             _hdOo_data :: Bool+                             _hdOo_dovisit :: Bool+                             _hdOo_newtypes :: Bool+                             _hdOo_rename :: Bool+                             _hdOo_sem :: Bool+                             _hdOo_sig :: Bool+                             _hdOo_unbox :: Bool+                             _hdOo_wantvisit :: Bool+                             _hdOprefix :: String+                             _hdOvcount :: Int+                             _tlOacount :: Int+                             _tlOallnts :: ([Name])+                             _tlOcInterfaceMap :: CInterfaceMap+                             _tlOcVisitsMap :: CVisitsMap+                             _tlOmanualAttrDepMap :: AttrOrderMap+                             _tlOo_case :: Bool+                             _tlOo_cata :: Bool+                             _tlOo_data :: Bool+                             _tlOo_dovisit :: Bool+                             _tlOo_newtypes :: Bool+                             _tlOo_rename :: Bool+                             _tlOo_sem :: Bool+                             _tlOo_sig :: Bool+                             _tlOo_unbox :: Bool+                             _tlOo_wantvisit :: Bool+                             _tlOprefix :: String+                             _tlOvcount :: Int+                             _hdIacount :: Int+                             _hdIadditionalDep :: (Seq Edge)+                             _hdIaranges :: (Seq (Int,Int,Int))+                             _hdIcProduction :: CProduction+                             _hdIdirectDep :: (Seq Edge)+                             _hdIerrors :: (Seq Error)+                             _hdIinstDep :: (Seq Edge)+                             _hdIntattrs :: (Seq (Vertex,NTAttr))+                             _hdIprods :: ([(Nonterminal,[Constructor])])+                             _hdIrules :: (Seq (Vertex,CRule))+                             _hdIvcount :: Int+                             _tlIacount :: Int+                             _tlIadditionalDep :: (Seq Edge)+                             _tlIaranges :: (Seq (Int,Int,Int))+                             _tlIcProductions :: CProductions+                             _tlIdirectDep :: (Seq Edge)+                             _tlIerrors :: (Seq Error)+                             _tlIinstDep :: (Seq Edge)+                             _tlIntattrs :: (Seq (Vertex,NTAttr))+                             _tlIprods :: ([(Nonterminal,[Constructor])])+                             _tlIrules :: (Seq (Vertex,CRule))+                             _tlIvcount :: Int+                             -- "Order.ag"(line 481, column 12)+                             _lhsOcProductions =+                                 _hdIcProduction : _tlIcProductions+                             -- use rule "Order.ag"(line 258, column 71)+                             _lhsOadditionalDep =+                                 _hdIadditionalDep Seq.<> _tlIadditionalDep+                             -- use rule "Order.ag"(line 362, column 36)+                             _lhsOaranges =+                                 _hdIaranges Seq.<> _tlIaranges+                             -- use rule "Order.ag"(line 244, column 33)+                             _lhsOdirectDep =+                                 _hdIdirectDep Seq.<> _tlIdirectDep+                             -- use rule "Order.ag"(line 60, column 70)+                             _lhsOerrors =+                                 _hdIerrors Seq.<> _tlIerrors+                             -- use rule "Order.ag"(line 289, column 31)+                             _lhsOinstDep =+                                 _hdIinstDep Seq.<> _tlIinstDep+                             -- use rule "Order.ag"(line 361, column 35)+                             _lhsOntattrs =+                                 _hdIntattrs Seq.<> _tlIntattrs+                             -- use rule "Order.ag"(line 379, column 41)+                             _lhsOprods =+                                 _hdIprods ++ _tlIprods+                             -- use rule "Order.ag"(line 234, column 18)+                             _lhsOrules =+                                 _hdIrules Seq.<> _tlIrules+                             -- copy rule (up)+                             _lhsOacount =+                                 _tlIacount+                             -- copy rule (up)+                             _lhsOvcount =+                                 _tlIvcount+                             -- copy rule (down)+                             _hdOacount =+                                 _lhsIacount+                             -- copy rule (down)+                             _hdOallnts =+                                 _lhsIallnts+                             -- copy rule (down)+                             _hdOcInterfaceMap =+                                 _lhsIcInterfaceMap+                             -- copy rule (down)+                             _hdOcVisitsMap =+                                 _lhsIcVisitsMap+                             -- copy rule (down)+                             _hdOmanualAttrDepMap =+                                 _lhsImanualAttrDepMap+                             -- copy rule (down)+                             _hdOo_case =+                                 _lhsIo_case+                             -- copy rule (down)+                             _hdOo_cata =+                                 _lhsIo_cata+                             -- copy rule (down)+                             _hdOo_data =+                                 _lhsIo_data+                             -- copy rule (down)+                             _hdOo_dovisit =+                                 _lhsIo_dovisit+                             -- copy rule (down)+                             _hdOo_newtypes =+                                 _lhsIo_newtypes+                             -- copy rule (down)+                             _hdOo_rename =+                                 _lhsIo_rename+                             -- copy rule (down)+                             _hdOo_sem =+                                 _lhsIo_sem+                             -- copy rule (down)+                             _hdOo_sig =+                                 _lhsIo_sig+                             -- copy rule (down)+                             _hdOo_unbox =+                                 _lhsIo_unbox+                             -- copy rule (down)+                             _hdOo_wantvisit =+                                 _lhsIo_wantvisit+                             -- copy rule (down)+                             _hdOprefix =+                                 _lhsIprefix+                             -- copy rule (down)+                             _hdOvcount =+                                 _lhsIvcount+                             -- copy rule (chain)+                             _tlOacount =+                                 _hdIacount+                             -- copy rule (down)+                             _tlOallnts =+                                 _lhsIallnts+                             -- copy rule (down)+                             _tlOcInterfaceMap =+                                 _lhsIcInterfaceMap+                             -- copy rule (down)+                             _tlOcVisitsMap =+                                 _lhsIcVisitsMap+                             -- copy rule (down)+                             _tlOmanualAttrDepMap =+                                 _lhsImanualAttrDepMap+                             -- copy rule (down)+                             _tlOo_case =+                                 _lhsIo_case+                             -- copy rule (down)+                             _tlOo_cata =+                                 _lhsIo_cata+                             -- copy rule (down)+                             _tlOo_data =+                                 _lhsIo_data+                             -- copy rule (down)+                             _tlOo_dovisit =+                                 _lhsIo_dovisit+                             -- copy rule (down)+                             _tlOo_newtypes =+                                 _lhsIo_newtypes+                             -- copy rule (down)+                             _tlOo_rename =+                                 _lhsIo_rename+                             -- copy rule (down)+                             _tlOo_sem =+                                 _lhsIo_sem+                             -- copy rule (down)+                             _tlOo_sig =+                                 _lhsIo_sig+                             -- copy rule (down)+                             _tlOo_unbox =+                                 _lhsIo_unbox+                             -- copy rule (down)+                             _tlOo_wantvisit =+                                 _lhsIo_wantvisit+                             -- copy rule (down)+                             _tlOprefix =+                                 _lhsIprefix+                             -- copy rule (chain)+                             _tlOvcount =+                                 _hdIvcount+                             ( _hdIacount,_hdIadditionalDep,_hdIaranges,_hdIcProduction,_hdIdirectDep,_hdIerrors,_hdIinstDep,_hdIntattrs,_hdIprods,_hdIrules,_hdIvcount) =+                                 (hd_ _hdOacount _hdOallnts _hdOcInterfaceMap _hdOcVisitsMap _hdOmanualAttrDepMap _hdOo_case _hdOo_cata _hdOo_data _hdOo_dovisit _hdOo_newtypes _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_unbox _hdOo_wantvisit _hdOprefix _hdOvcount )+                             ( _tlIacount,_tlIadditionalDep,_tlIaranges,_tlIcProductions,_tlIdirectDep,_tlIerrors,_tlIinstDep,_tlIntattrs,_tlIprods,_tlIrules,_tlIvcount) =+                                 (tl_ _tlOacount _tlOallnts _tlOcInterfaceMap _tlOcVisitsMap _tlOmanualAttrDepMap _tlOo_case _tlOo_cata _tlOo_data _tlOo_dovisit _tlOo_newtypes _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_unbox _tlOo_wantvisit _tlOprefix _tlOvcount )+                         in  ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOcProductions,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOntattrs,_lhsOprods,_lhsOrules,_lhsOvcount))) )+sem_Productions_Nil :: T_Productions+sem_Productions_Nil  =+    (T_Productions (\ _lhsIacount+                      _lhsIallnts+                      _lhsIcInterfaceMap+                      _lhsIcVisitsMap+                      _lhsImanualAttrDepMap+                      _lhsIo_case+                      _lhsIo_cata+                      _lhsIo_data+                      _lhsIo_dovisit+                      _lhsIo_newtypes+                      _lhsIo_rename+                      _lhsIo_sem+                      _lhsIo_sig+                      _lhsIo_unbox+                      _lhsIo_wantvisit+                      _lhsIprefix+                      _lhsIvcount ->+                        (let _lhsOcProductions :: CProductions+                             _lhsOadditionalDep :: (Seq Edge)+                             _lhsOaranges :: (Seq (Int,Int,Int))+                             _lhsOdirectDep :: (Seq Edge)+                             _lhsOerrors :: (Seq Error)+                             _lhsOinstDep :: (Seq Edge)+                             _lhsOntattrs :: (Seq (Vertex,NTAttr))+                             _lhsOprods :: ([(Nonterminal,[Constructor])])+                             _lhsOrules :: (Seq (Vertex,CRule))+                             _lhsOacount :: Int+                             _lhsOvcount :: Int+                             -- "Order.ag"(line 482, column 12)+                             _lhsOcProductions =+                                 []+                             -- use rule "Order.ag"(line 258, column 71)+                             _lhsOadditionalDep =+                                 Seq.empty+                             -- use rule "Order.ag"(line 362, column 36)+                             _lhsOaranges =+                                 Seq.empty+                             -- use rule "Order.ag"(line 244, column 33)+                             _lhsOdirectDep =+                                 Seq.empty+                             -- use rule "Order.ag"(line 60, column 70)+                             _lhsOerrors =+                                 Seq.empty+                             -- use rule "Order.ag"(line 289, column 31)+                             _lhsOinstDep =+                                 Seq.empty+                             -- use rule "Order.ag"(line 361, column 35)+                             _lhsOntattrs =+                                 Seq.empty+                             -- use rule "Order.ag"(line 379, column 41)+                             _lhsOprods =+                                 []+                             -- use rule "Order.ag"(line 234, column 18)+                             _lhsOrules =+                                 Seq.empty+                             -- copy rule (chain)+                             _lhsOacount =+                                 _lhsIacount+                             -- copy rule (chain)+                             _lhsOvcount =+                                 _lhsIvcount+                         in  ( _lhsOacount,_lhsOadditionalDep,_lhsOaranges,_lhsOcProductions,_lhsOdirectDep,_lhsOerrors,_lhsOinstDep,_lhsOntattrs,_lhsOprods,_lhsOrules,_lhsOvcount))) )+-- Rule --------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allTypeSigs          : Map Name Type+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         altAttrs             : Map AltAttr Vertex+         attrs                : [(Name,Name)]+         childInhs            : Map Name Attributes+         childNts             : Map Name Nonterminal+         con                  : Identifier+         inh                  : Attributes+         manualAttrDepMap     : AttrOrderMap+         nt                   : Identifier+         o_case               : Bool+         o_cata               : Bool+         o_dovisit            : Bool+         o_newtypes           : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_wantvisit          : Bool+         prefix               : String+         syn                  : Attributes+         synsOfChildren       : Map Name Attributes+      synthesized attributes:+         additionalDep        : Seq Edge+         directDep            : Seq Edge+         errors               : Seq Error+         gathAltAttrs         : [AltAttr]+         gathRules            : Seq CRule+         instDep              : Seq Edge+         instVars             : [Name]+         locVars              : [Name]+   alternatives:+      alternative Rule:+         child pattern        : Pattern+         child rhs            : Expression+         child owrt           : {Bool}+         child origin         : {String}+         visit 0:+            local defines     : _+            local gathRules   : _+            local manualDeps  : _+-}+-- cata+sem_Rule :: Rule ->+            T_Rule+sem_Rule (Rule _pattern _rhs _owrt _origin )  =+    (sem_Rule_Rule (sem_Pattern _pattern ) (sem_Expression _rhs ) _owrt _origin )+-- semantic domain+newtype T_Rule = T_Rule ((Map Name Type) ->+                         ([(Name,Type,Bool)]) ->+                         ([Name]) ->+                         (Map AltAttr Vertex) ->+                         ([(Name,Name)]) ->+                         (Map Name Attributes) ->+                         (Map Name Nonterminal) ->+                         Identifier ->+                         Attributes ->+                         AttrOrderMap ->+                         Identifier ->+                         Bool ->+                         Bool ->+                         Bool ->+                         Bool ->+                         Bool ->+                         Bool ->+                         Bool ->+                         Bool ->+                         String ->+                         Attributes ->+                         (Map Name Attributes) ->+                         ( (Seq Edge),(Seq Edge),(Seq Error),([AltAttr]),(Seq CRule),(Seq Edge),([Name]),([Name])))+data Inh_Rule = Inh_Rule {allTypeSigs_Inh_Rule :: Map Name Type,allfields_Inh_Rule :: [(Name,Type,Bool)],allnts_Inh_Rule :: [Name],altAttrs_Inh_Rule :: Map AltAttr Vertex,attrs_Inh_Rule :: [(Name,Name)],childInhs_Inh_Rule :: Map Name Attributes,childNts_Inh_Rule :: Map Name Nonterminal,con_Inh_Rule :: Identifier,inh_Inh_Rule :: Attributes,manualAttrDepMap_Inh_Rule :: AttrOrderMap,nt_Inh_Rule :: Identifier,o_case_Inh_Rule :: Bool,o_cata_Inh_Rule :: Bool,o_dovisit_Inh_Rule :: Bool,o_newtypes_Inh_Rule :: Bool,o_rename_Inh_Rule :: Bool,o_sem_Inh_Rule :: Bool,o_sig_Inh_Rule :: Bool,o_wantvisit_Inh_Rule :: Bool,prefix_Inh_Rule :: String,syn_Inh_Rule :: Attributes,synsOfChildren_Inh_Rule :: Map Name Attributes}+data Syn_Rule = Syn_Rule {additionalDep_Syn_Rule :: Seq Edge,directDep_Syn_Rule :: Seq Edge,errors_Syn_Rule :: Seq Error,gathAltAttrs_Syn_Rule :: [AltAttr],gathRules_Syn_Rule :: Seq CRule,instDep_Syn_Rule :: Seq Edge,instVars_Syn_Rule :: [Name],locVars_Syn_Rule :: [Name]}+wrap_Rule (T_Rule sem ) (Inh_Rule _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren )  =+    (let ( _lhsOadditionalDep,_lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars) =+             (sem _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren )+     in  (Syn_Rule _lhsOadditionalDep _lhsOdirectDep _lhsOerrors _lhsOgathAltAttrs _lhsOgathRules _lhsOinstDep _lhsOinstVars _lhsOlocVars ))+sem_Rule_Rule :: T_Pattern ->+                 T_Expression ->+                 Bool ->+                 String ->+                 T_Rule+sem_Rule_Rule (T_Pattern pattern_ ) (T_Expression rhs_ ) owrt_ origin_  =+    (T_Rule (\ _lhsIallTypeSigs+               _lhsIallfields+               _lhsIallnts+               _lhsIaltAttrs+               _lhsIattrs+               _lhsIchildInhs+               _lhsIchildNts+               _lhsIcon+               _lhsIinh+               _lhsImanualAttrDepMap+               _lhsInt+               _lhsIo_case+               _lhsIo_cata+               _lhsIo_dovisit+               _lhsIo_newtypes+               _lhsIo_rename+               _lhsIo_sem+               _lhsIo_sig+               _lhsIo_wantvisit+               _lhsIprefix+               _lhsIsyn+               _lhsIsynsOfChildren ->+                 (let _lhsOdirectDep :: (Seq Edge)+                      _lhsOadditionalDep :: (Seq Edge)+                      _lhsOinstDep :: (Seq Edge)+                      _lhsOerrors :: (Seq Error)+                      _lhsOgathAltAttrs :: ([AltAttr])+                      _lhsOgathRules :: (Seq CRule)+                      _lhsOinstVars :: ([Name])+                      _lhsOlocVars :: ([Name])+                      _patternOallTypeSigs :: (Map Name Type)+                      _patternOaltAttrs :: (Map AltAttr Vertex)+                      _patternOcon :: Identifier+                      _patternOinh :: Attributes+                      _patternOnt :: Identifier+                      _patternOsyn :: Attributes+                      _rhsOallfields :: ([(Name,Type,Bool)])+                      _rhsOallnts :: ([Name])+                      _rhsOattrs :: ([(Name,Name)])+                      _rhsOcon :: Name+                      _rhsOnt :: Name+                      _patternIcopy :: Pattern+                      _patternIerrors :: (Seq Error)+                      _patternIgathAltAttrs :: ([AltAttr])+                      _patternIinstVars :: ([Name])+                      _patternIlocVars :: ([Name])+                      _patternIpatternAttrs :: ([(Name,Name,Bool,Patterns)])+                      _rhsIallRhsVars :: (Set (Name,Name))+                      _rhsIcopy :: Expression+                      _rhsIerrors :: (Seq Error)+                      _rhsItextLines :: ([String])+                      _rhsIusedAttrs :: ([(Name,Name)])+                      _rhsIusedFields :: ([Name])+                      _rhsIusedLocals :: ([Name])+                      -- "Order.ag"(line 193, column 12)+                      _defines =+                          let  tp field attr parts | field == _LOC || field == _INST+                                                                   = case parts of+                                                                       [] -> Map.lookup attr _lhsIallTypeSigs+                                                                       _  -> (sequence (map typ parts)) >>= (haskellTupel . map (substSelf _lhsInt))+                                                   | field == _LHS = Map.lookup attr _lhsIsyn+                                                   | otherwise     = Map.lookup attr (findWithErr1 "Rule.defines.tp" field _lhsIchildInhs)+                               typ :: Pattern -> Maybe Type+                               typ (Alias field attr _ parts) = tp field attr parts+                               typ (Underscore _)             = Nothing+                               typ (Product _ pats)           = tp _LOC undefined pats+                               typ _                          = Nothing+                          in Map.fromList  [ (findWithErr1 "Rule.defines" aa _lhsIaltAttrs, (field,attr,(tp field attr parts)))+                                           | (field,attr,isLocalOrInst,parts) <- _patternIpatternAttrs+                                           , let aa = AltAttr field attr isLocalOrInst+                                           ]+                      -- "Order.ag"(line 209, column 12)+                      _gathRules =+                          let childnt field = Map.lookup field _lhsIchildNts+                          in Seq.fromList [ CRule attr False True _lhsInt _lhsIcon field (childnt field) tp _patternIcopy _rhsItextLines _defines owrt_ origin_ _rhsIallRhsVars+                                          | (field,attr,tp) <- Map.elems _defines+                                          ]+                      -- "Order.ag"(line 246, column 12)+                      _lhsOdirectDep =+                          let  defined = Map.keys _defines+                               used =  [ Map.lookup (AltAttr field attr True) _lhsIaltAttrs | (field,attr) <- _rhsIusedAttrs]+                                       ++ [ Map.lookup (AltAttr _LOC attr True) _lhsIaltAttrs | attr <- _rhsIusedLocals ++ _rhsIusedFields ]+                          in Seq.fromList [ (x,y) | Just x <- used, y <- defined ]+                      -- "Order.ag"(line 264, column 7)+                      _manualDeps =+                          Set.toList $ Map.findWithDefault Set.empty _lhsIcon $ Map.findWithDefault Map.empty _lhsInt _lhsImanualAttrDepMap+                      -- "Order.ag"(line 266, column 7)+                      _lhsOadditionalDep =+                          Seq.fromList [ (vertexA, vertexB)+                                       | Dependency (fldA,nmA) (fldB,nmB) <- _manualDeps+                                       , let vertexA = findWithErr2 (AltAttr fldA nmA True) _lhsIaltAttrs+                                       , vertexB <- lookupVertices fldB nmB _lhsIaltAttrs+                                       ]+                      -- "Order.ag"(line 292, column 7)+                      _lhsOinstDep =+                          Seq.fromList $+                            [ (instVert, synVert)+                            | (field,instNm,_) <- Map.elems _defines+                            , field == _INST+                            , synNm <- Map.keys (findWithErr2 instNm _lhsIsynsOfChildren)+                            , let instAttr = AltAttr _INST instNm True+                                  synAttr  = AltAttr instNm synNm True+                                  instVert = findWithErr2 instAttr _lhsIaltAttrs+                                  synVert  = findWithErr2 synAttr _lhsIaltAttrs+                            ]+                      -- use rule "Order.ag"(line 60, column 70)+                      _lhsOerrors =+                          _patternIerrors Seq.<> _rhsIerrors+                      -- use rule "Order.ag"(line 146, column 68)+                      _lhsOgathAltAttrs =+                          _patternIgathAltAttrs+                      -- use rule "Order.ag"(line 182, column 23)+                      _lhsOgathRules =+                          _gathRules+                      -- use rule "Order.ag"(line 533, column 80)+                      _lhsOinstVars =+                          _patternIinstVars+                      -- use rule "Order.ag"(line 533, column 48)+                      _lhsOlocVars =+                          _patternIlocVars+                      -- copy rule (down)+                      _patternOallTypeSigs =+                          _lhsIallTypeSigs+                      -- copy rule (down)+                      _patternOaltAttrs =+                          _lhsIaltAttrs+                      -- copy rule (down)+                      _patternOcon =+                          _lhsIcon+                      -- copy rule (down)+                      _patternOinh =+                          _lhsIinh+                      -- copy rule (down)+                      _patternOnt =+                          _lhsInt+                      -- copy rule (down)+                      _patternOsyn =+                          _lhsIsyn+                      -- copy rule (down)+                      _rhsOallfields =+                          _lhsIallfields+                      -- copy rule (down)+                      _rhsOallnts =+                          _lhsIallnts+                      -- copy rule (down)+                      _rhsOattrs =+                          _lhsIattrs+                      -- copy rule (down)+                      _rhsOcon =+                          _lhsIcon+                      -- copy rule (down)+                      _rhsOnt =+                          _lhsInt+                      ( _patternIcopy,_patternIerrors,_patternIgathAltAttrs,_patternIinstVars,_patternIlocVars,_patternIpatternAttrs) =+                          (pattern_ _patternOallTypeSigs _patternOaltAttrs _patternOcon _patternOinh _patternOnt _patternOsyn )+                      ( _rhsIallRhsVars,_rhsIcopy,_rhsIerrors,_rhsItextLines,_rhsIusedAttrs,_rhsIusedFields,_rhsIusedLocals) =+                          (rhs_ _rhsOallfields _rhsOallnts _rhsOattrs _rhsOcon _rhsOnt )+                  in  ( _lhsOadditionalDep,_lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars))) )+-- Rules -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allTypeSigs          : Map Name Type+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         altAttrs             : Map AltAttr Vertex+         attrs                : [(Name,Name)]+         childInhs            : Map Name Attributes+         childNts             : Map Name Nonterminal+         con                  : Identifier+         inh                  : Attributes+         manualAttrDepMap     : AttrOrderMap+         nt                   : Identifier+         o_case               : Bool+         o_cata               : Bool+         o_dovisit            : Bool+         o_newtypes           : Bool+         o_rename             : Bool+         o_sem                : Bool+         o_sig                : Bool+         o_wantvisit          : Bool+         prefix               : String+         syn                  : Attributes+         synsOfChildren       : Map Name Attributes+      synthesized attributes:+         additionalDep        : Seq Edge+         directDep            : Seq Edge+         errors               : Seq Error+         gathAltAttrs         : [AltAttr]+         gathRules            : Seq CRule+         instDep              : Seq Edge+         instVars             : [Name]+         locVars              : [Name]+   alternatives:+      alternative Cons:+         child hd             : Rule+         child tl             : Rules+      alternative Nil:+-}+-- cata+sem_Rules :: Rules ->+             T_Rules+sem_Rules list  =+    (Prelude.foldr sem_Rules_Cons sem_Rules_Nil (Prelude.map sem_Rule list) )+-- semantic domain+newtype T_Rules = T_Rules ((Map Name Type) ->+                           ([(Name,Type,Bool)]) ->+                           ([Name]) ->+                           (Map AltAttr Vertex) ->+                           ([(Name,Name)]) ->+                           (Map Name Attributes) ->+                           (Map Name Nonterminal) ->+                           Identifier ->+                           Attributes ->+                           AttrOrderMap ->+                           Identifier ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           Bool ->+                           String ->+                           Attributes ->+                           (Map Name Attributes) ->+                           ( (Seq Edge),(Seq Edge),(Seq Error),([AltAttr]),(Seq CRule),(Seq Edge),([Name]),([Name])))+data Inh_Rules = Inh_Rules {allTypeSigs_Inh_Rules :: Map Name Type,allfields_Inh_Rules :: [(Name,Type,Bool)],allnts_Inh_Rules :: [Name],altAttrs_Inh_Rules :: Map AltAttr Vertex,attrs_Inh_Rules :: [(Name,Name)],childInhs_Inh_Rules :: Map Name Attributes,childNts_Inh_Rules :: Map Name Nonterminal,con_Inh_Rules :: Identifier,inh_Inh_Rules :: Attributes,manualAttrDepMap_Inh_Rules :: AttrOrderMap,nt_Inh_Rules :: Identifier,o_case_Inh_Rules :: Bool,o_cata_Inh_Rules :: Bool,o_dovisit_Inh_Rules :: Bool,o_newtypes_Inh_Rules :: Bool,o_rename_Inh_Rules :: Bool,o_sem_Inh_Rules :: Bool,o_sig_Inh_Rules :: Bool,o_wantvisit_Inh_Rules :: Bool,prefix_Inh_Rules :: String,syn_Inh_Rules :: Attributes,synsOfChildren_Inh_Rules :: Map Name Attributes}+data Syn_Rules = Syn_Rules {additionalDep_Syn_Rules :: Seq Edge,directDep_Syn_Rules :: Seq Edge,errors_Syn_Rules :: Seq Error,gathAltAttrs_Syn_Rules :: [AltAttr],gathRules_Syn_Rules :: Seq CRule,instDep_Syn_Rules :: Seq Edge,instVars_Syn_Rules :: [Name],locVars_Syn_Rules :: [Name]}+wrap_Rules (T_Rules sem ) (Inh_Rules _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren )  =+    (let ( _lhsOadditionalDep,_lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars) =+             (sem _lhsIallTypeSigs _lhsIallfields _lhsIallnts _lhsIaltAttrs _lhsIattrs _lhsIchildInhs _lhsIchildNts _lhsIcon _lhsIinh _lhsImanualAttrDepMap _lhsInt _lhsIo_case _lhsIo_cata _lhsIo_dovisit _lhsIo_newtypes _lhsIo_rename _lhsIo_sem _lhsIo_sig _lhsIo_wantvisit _lhsIprefix _lhsIsyn _lhsIsynsOfChildren )+     in  (Syn_Rules _lhsOadditionalDep _lhsOdirectDep _lhsOerrors _lhsOgathAltAttrs _lhsOgathRules _lhsOinstDep _lhsOinstVars _lhsOlocVars ))+sem_Rules_Cons :: T_Rule ->+                  T_Rules ->+                  T_Rules+sem_Rules_Cons (T_Rule hd_ ) (T_Rules tl_ )  =+    (T_Rules (\ _lhsIallTypeSigs+                _lhsIallfields+                _lhsIallnts+                _lhsIaltAttrs+                _lhsIattrs+                _lhsIchildInhs+                _lhsIchildNts+                _lhsIcon+                _lhsIinh+                _lhsImanualAttrDepMap+                _lhsInt+                _lhsIo_case+                _lhsIo_cata+                _lhsIo_dovisit+                _lhsIo_newtypes+                _lhsIo_rename+                _lhsIo_sem+                _lhsIo_sig+                _lhsIo_wantvisit+                _lhsIprefix+                _lhsIsyn+                _lhsIsynsOfChildren ->+                  (let _lhsOadditionalDep :: (Seq Edge)+                       _lhsOdirectDep :: (Seq Edge)+                       _lhsOerrors :: (Seq Error)+                       _lhsOgathAltAttrs :: ([AltAttr])+                       _lhsOgathRules :: (Seq CRule)+                       _lhsOinstDep :: (Seq Edge)+                       _lhsOinstVars :: ([Name])+                       _lhsOlocVars :: ([Name])+                       _hdOallTypeSigs :: (Map Name Type)+                       _hdOallfields :: ([(Name,Type,Bool)])+                       _hdOallnts :: ([Name])+                       _hdOaltAttrs :: (Map AltAttr Vertex)+                       _hdOattrs :: ([(Name,Name)])+                       _hdOchildInhs :: (Map Name Attributes)+                       _hdOchildNts :: (Map Name Nonterminal)+                       _hdOcon :: Identifier+                       _hdOinh :: Attributes+                       _hdOmanualAttrDepMap :: AttrOrderMap+                       _hdOnt :: Identifier+                       _hdOo_case :: Bool+                       _hdOo_cata :: Bool+                       _hdOo_dovisit :: Bool+                       _hdOo_newtypes :: Bool+                       _hdOo_rename :: Bool+                       _hdOo_sem :: Bool+                       _hdOo_sig :: Bool+                       _hdOo_wantvisit :: Bool+                       _hdOprefix :: String+                       _hdOsyn :: Attributes+                       _hdOsynsOfChildren :: (Map Name Attributes)+                       _tlOallTypeSigs :: (Map Name Type)+                       _tlOallfields :: ([(Name,Type,Bool)])+                       _tlOallnts :: ([Name])+                       _tlOaltAttrs :: (Map AltAttr Vertex)+                       _tlOattrs :: ([(Name,Name)])+                       _tlOchildInhs :: (Map Name Attributes)+                       _tlOchildNts :: (Map Name Nonterminal)+                       _tlOcon :: Identifier+                       _tlOinh :: Attributes+                       _tlOmanualAttrDepMap :: AttrOrderMap+                       _tlOnt :: Identifier+                       _tlOo_case :: Bool+                       _tlOo_cata :: Bool+                       _tlOo_dovisit :: Bool+                       _tlOo_newtypes :: Bool+                       _tlOo_rename :: Bool+                       _tlOo_sem :: Bool+                       _tlOo_sig :: Bool+                       _tlOo_wantvisit :: Bool+                       _tlOprefix :: String+                       _tlOsyn :: Attributes+                       _tlOsynsOfChildren :: (Map Name Attributes)+                       _hdIadditionalDep :: (Seq Edge)+                       _hdIdirectDep :: (Seq Edge)+                       _hdIerrors :: (Seq Error)+                       _hdIgathAltAttrs :: ([AltAttr])+                       _hdIgathRules :: (Seq CRule)+                       _hdIinstDep :: (Seq Edge)+                       _hdIinstVars :: ([Name])+                       _hdIlocVars :: ([Name])+                       _tlIadditionalDep :: (Seq Edge)+                       _tlIdirectDep :: (Seq Edge)+                       _tlIerrors :: (Seq Error)+                       _tlIgathAltAttrs :: ([AltAttr])+                       _tlIgathRules :: (Seq CRule)+                       _tlIinstDep :: (Seq Edge)+                       _tlIinstVars :: ([Name])+                       _tlIlocVars :: ([Name])+                       -- use rule "Order.ag"(line 258, column 71)+                       _lhsOadditionalDep =+                           _hdIadditionalDep Seq.<> _tlIadditionalDep+                       -- use rule "Order.ag"(line 244, column 33)+                       _lhsOdirectDep =+                           _hdIdirectDep Seq.<> _tlIdirectDep+                       -- use rule "Order.ag"(line 60, column 70)+                       _lhsOerrors =+                           _hdIerrors Seq.<> _tlIerrors+                       -- use rule "Order.ag"(line 146, column 68)+                       _lhsOgathAltAttrs =+                           _hdIgathAltAttrs ++ _tlIgathAltAttrs+                       -- use rule "Order.ag"(line 182, column 23)+                       _lhsOgathRules =+                           _hdIgathRules Seq.<> _tlIgathRules+                       -- use rule "Order.ag"(line 289, column 31)+                       _lhsOinstDep =+                           _hdIinstDep Seq.<> _tlIinstDep+                       -- use rule "Order.ag"(line 533, column 80)+                       _lhsOinstVars =+                           _hdIinstVars ++ _tlIinstVars+                       -- use rule "Order.ag"(line 533, column 48)+                       _lhsOlocVars =+                           _hdIlocVars ++ _tlIlocVars+                       -- copy rule (down)+                       _hdOallTypeSigs =+                           _lhsIallTypeSigs+                       -- copy rule (down)+                       _hdOallfields =+                           _lhsIallfields+                       -- copy rule (down)+                       _hdOallnts =+                           _lhsIallnts+                       -- copy rule (down)+                       _hdOaltAttrs =+                           _lhsIaltAttrs+                       -- copy rule (down)+                       _hdOattrs =+                           _lhsIattrs+                       -- copy rule (down)+                       _hdOchildInhs =+                           _lhsIchildInhs+                       -- copy rule (down)+                       _hdOchildNts =+                           _lhsIchildNts+                       -- copy rule (down)+                       _hdOcon =+                           _lhsIcon+                       -- copy rule (down)+                       _hdOinh =+                           _lhsIinh+                       -- copy rule (down)+                       _hdOmanualAttrDepMap =+                           _lhsImanualAttrDepMap+                       -- copy rule (down)+                       _hdOnt =+                           _lhsInt+                       -- copy rule (down)+                       _hdOo_case =+                           _lhsIo_case+                       -- copy rule (down)+                       _hdOo_cata =+                           _lhsIo_cata+                       -- copy rule (down)+                       _hdOo_dovisit =+                           _lhsIo_dovisit+                       -- copy rule (down)+                       _hdOo_newtypes =+                           _lhsIo_newtypes+                       -- copy rule (down)+                       _hdOo_rename =+                           _lhsIo_rename+                       -- copy rule (down)+                       _hdOo_sem =+                           _lhsIo_sem+                       -- copy rule (down)+                       _hdOo_sig =+                           _lhsIo_sig+                       -- copy rule (down)+                       _hdOo_wantvisit =+                           _lhsIo_wantvisit+                       -- copy rule (down)+                       _hdOprefix =+                           _lhsIprefix+                       -- copy rule (down)+                       _hdOsyn =+                           _lhsIsyn+                       -- copy rule (down)+                       _hdOsynsOfChildren =+                           _lhsIsynsOfChildren+                       -- copy rule (down)+                       _tlOallTypeSigs =+                           _lhsIallTypeSigs+                       -- copy rule (down)+                       _tlOallfields =+                           _lhsIallfields+                       -- copy rule (down)+                       _tlOallnts =+                           _lhsIallnts+                       -- copy rule (down)+                       _tlOaltAttrs =+                           _lhsIaltAttrs+                       -- copy rule (down)+                       _tlOattrs =+                           _lhsIattrs+                       -- copy rule (down)+                       _tlOchildInhs =+                           _lhsIchildInhs+                       -- copy rule (down)+                       _tlOchildNts =+                           _lhsIchildNts+                       -- copy rule (down)+                       _tlOcon =+                           _lhsIcon+                       -- copy rule (down)+                       _tlOinh =+                           _lhsIinh+                       -- copy rule (down)+                       _tlOmanualAttrDepMap =+                           _lhsImanualAttrDepMap+                       -- copy rule (down)+                       _tlOnt =+                           _lhsInt+                       -- copy rule (down)+                       _tlOo_case =+                           _lhsIo_case+                       -- copy rule (down)+                       _tlOo_cata =+                           _lhsIo_cata+                       -- copy rule (down)+                       _tlOo_dovisit =+                           _lhsIo_dovisit+                       -- copy rule (down)+                       _tlOo_newtypes =+                           _lhsIo_newtypes+                       -- copy rule (down)+                       _tlOo_rename =+                           _lhsIo_rename+                       -- copy rule (down)+                       _tlOo_sem =+                           _lhsIo_sem+                       -- copy rule (down)+                       _tlOo_sig =+                           _lhsIo_sig+                       -- copy rule (down)+                       _tlOo_wantvisit =+                           _lhsIo_wantvisit+                       -- copy rule (down)+                       _tlOprefix =+                           _lhsIprefix+                       -- copy rule (down)+                       _tlOsyn =+                           _lhsIsyn+                       -- copy rule (down)+                       _tlOsynsOfChildren =+                           _lhsIsynsOfChildren+                       ( _hdIadditionalDep,_hdIdirectDep,_hdIerrors,_hdIgathAltAttrs,_hdIgathRules,_hdIinstDep,_hdIinstVars,_hdIlocVars) =+                           (hd_ _hdOallTypeSigs _hdOallfields _hdOallnts _hdOaltAttrs _hdOattrs _hdOchildInhs _hdOchildNts _hdOcon _hdOinh _hdOmanualAttrDepMap _hdOnt _hdOo_case _hdOo_cata _hdOo_dovisit _hdOo_newtypes _hdOo_rename _hdOo_sem _hdOo_sig _hdOo_wantvisit _hdOprefix _hdOsyn _hdOsynsOfChildren )+                       ( _tlIadditionalDep,_tlIdirectDep,_tlIerrors,_tlIgathAltAttrs,_tlIgathRules,_tlIinstDep,_tlIinstVars,_tlIlocVars) =+                           (tl_ _tlOallTypeSigs _tlOallfields _tlOallnts _tlOaltAttrs _tlOattrs _tlOchildInhs _tlOchildNts _tlOcon _tlOinh _tlOmanualAttrDepMap _tlOnt _tlOo_case _tlOo_cata _tlOo_dovisit _tlOo_newtypes _tlOo_rename _tlOo_sem _tlOo_sig _tlOo_wantvisit _tlOprefix _tlOsyn _tlOsynsOfChildren )+                   in  ( _lhsOadditionalDep,_lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars))) )+sem_Rules_Nil :: T_Rules+sem_Rules_Nil  =+    (T_Rules (\ _lhsIallTypeSigs+                _lhsIallfields+                _lhsIallnts+                _lhsIaltAttrs+                _lhsIattrs+                _lhsIchildInhs+                _lhsIchildNts+                _lhsIcon+                _lhsIinh+                _lhsImanualAttrDepMap+                _lhsInt+                _lhsIo_case+                _lhsIo_cata+                _lhsIo_dovisit+                _lhsIo_newtypes+                _lhsIo_rename+                _lhsIo_sem+                _lhsIo_sig+                _lhsIo_wantvisit+                _lhsIprefix+                _lhsIsyn+                _lhsIsynsOfChildren ->+                  (let _lhsOadditionalDep :: (Seq Edge)+                       _lhsOdirectDep :: (Seq Edge)+                       _lhsOerrors :: (Seq Error)+                       _lhsOgathAltAttrs :: ([AltAttr])+                       _lhsOgathRules :: (Seq CRule)+                       _lhsOinstDep :: (Seq Edge)+                       _lhsOinstVars :: ([Name])+                       _lhsOlocVars :: ([Name])+                       -- use rule "Order.ag"(line 258, column 71)+                       _lhsOadditionalDep =+                           Seq.empty+                       -- use rule "Order.ag"(line 244, column 33)+                       _lhsOdirectDep =+                           Seq.empty+                       -- use rule "Order.ag"(line 60, column 70)+                       _lhsOerrors =+                           Seq.empty+                       -- use rule "Order.ag"(line 146, column 68)+                       _lhsOgathAltAttrs =+                           []+                       -- use rule "Order.ag"(line 182, column 23)+                       _lhsOgathRules =+                           Seq.empty+                       -- use rule "Order.ag"(line 289, column 31)+                       _lhsOinstDep =+                           Seq.empty+                       -- use rule "Order.ag"(line 533, column 80)+                       _lhsOinstVars =+                           []+                       -- use rule "Order.ag"(line 533, column 48)+                       _lhsOlocVars =+                           []+                   in  ( _lhsOadditionalDep,_lhsOdirectDep,_lhsOerrors,_lhsOgathAltAttrs,_lhsOgathRules,_lhsOinstDep,_lhsOinstVars,_lhsOlocVars))) )+-- TypeSig -----------------------------------------------------+{-+   visit 0:+      chained attribute:+         typeSigs             : Map Name Type+   alternatives:+      alternative TypeSig:+         child name           : {Name}+         child tp             : {Type}+-}+-- cata+sem_TypeSig :: TypeSig ->+               T_TypeSig+sem_TypeSig (TypeSig _name _tp )  =+    (sem_TypeSig_TypeSig _name _tp )+-- semantic domain+newtype T_TypeSig = T_TypeSig ((Map Name Type) ->+                               ( (Map Name Type)))+data Inh_TypeSig = Inh_TypeSig {typeSigs_Inh_TypeSig :: Map Name Type}+data Syn_TypeSig = Syn_TypeSig {typeSigs_Syn_TypeSig :: Map Name Type}+wrap_TypeSig (T_TypeSig sem ) (Inh_TypeSig _lhsItypeSigs )  =+    (let ( _lhsOtypeSigs) =+             (sem _lhsItypeSigs )+     in  (Syn_TypeSig _lhsOtypeSigs ))+sem_TypeSig_TypeSig :: Name ->+                       Type ->+                       T_TypeSig+sem_TypeSig_TypeSig name_ tp_  =+    (T_TypeSig (\ _lhsItypeSigs ->+                    (let _lhsOtypeSigs :: (Map Name Type)+                         -- "Order.ag"(line 393, column 13)+                         _lhsOtypeSigs =+                             Map.insert name_ tp_ _lhsItypeSigs+                     in  ( _lhsOtypeSigs))) )+-- TypeSigs ----------------------------------------------------+{-+   visit 0:+      chained attribute:+         typeSigs             : Map Name Type+   alternatives:+      alternative Cons:+         child hd             : TypeSig+         child tl             : TypeSigs+      alternative Nil:+-}+-- cata+sem_TypeSigs :: TypeSigs ->+                T_TypeSigs+sem_TypeSigs list  =+    (Prelude.foldr sem_TypeSigs_Cons sem_TypeSigs_Nil (Prelude.map sem_TypeSig list) )+-- semantic domain+newtype T_TypeSigs = T_TypeSigs ((Map Name Type) ->+                                 ( (Map Name Type)))+data Inh_TypeSigs = Inh_TypeSigs {typeSigs_Inh_TypeSigs :: Map Name Type}+data Syn_TypeSigs = Syn_TypeSigs {typeSigs_Syn_TypeSigs :: Map Name Type}+wrap_TypeSigs (T_TypeSigs sem ) (Inh_TypeSigs _lhsItypeSigs )  =+    (let ( _lhsOtypeSigs) =+             (sem _lhsItypeSigs )+     in  (Syn_TypeSigs _lhsOtypeSigs ))+sem_TypeSigs_Cons :: T_TypeSig ->+                     T_TypeSigs ->+                     T_TypeSigs+sem_TypeSigs_Cons (T_TypeSig hd_ ) (T_TypeSigs tl_ )  =+    (T_TypeSigs (\ _lhsItypeSigs ->+                     (let _lhsOtypeSigs :: (Map Name Type)+                          _hdOtypeSigs :: (Map Name Type)+                          _tlOtypeSigs :: (Map Name Type)+                          _hdItypeSigs :: (Map Name Type)+                          _tlItypeSigs :: (Map Name Type)+                          -- copy rule (up)+                          _lhsOtypeSigs =+                              _tlItypeSigs+                          -- copy rule (down)+                          _hdOtypeSigs =+                              _lhsItypeSigs+                          -- copy rule (chain)+                          _tlOtypeSigs =+                              _hdItypeSigs+                          ( _hdItypeSigs) =+                              (hd_ _hdOtypeSigs )+                          ( _tlItypeSigs) =+                              (tl_ _tlOtypeSigs )+                      in  ( _lhsOtypeSigs))) )+sem_TypeSigs_Nil :: T_TypeSigs+sem_TypeSigs_Nil  =+    (T_TypeSigs (\ _lhsItypeSigs ->+                     (let _lhsOtypeSigs :: (Map Name Type)+                          -- copy rule (chain)+                          _lhsOtypeSigs =+                              _lhsItypeSigs+                      in  ( _lhsOtypeSigs))) )
+ src-derived/Patterns.hs view
@@ -0,0 +1,56 @@++-- UUAGC 0.9.5 (Patterns.ag)+module Patterns where++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)+-- Pattern -----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         copy                 : SELF+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local copy        : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+-}+data Pattern = Alias (Name) (Name) (Pattern) (Patterns) +             | Constr (Constructor) (Patterns) +             | Product (Pos) (Patterns) +             | Underscore (Pos) +             deriving ( Show)+-- Patterns ----------------------------------------------------+{-+   visit 0:+      synthesized attribute:+         copy                 : SELF+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+      alternative Nil:+         visit 0:+            local copy        : _+-}+type Patterns = [Pattern]
+ src-derived/PrintCode.hs view
@@ -0,0 +1,2620 @@++-- UUAGC 0.9.5 (PrintCode.ag)+module PrintCode where++import Char (isAlphaNum)+import Pretty+import Code+import Patterns+import Options+import CommonTypes (attrname, _LOC, getName, nullIdent)+import Data.List(intersperse)+import System.IO+import System.Directory++import Pretty+import Patterns+import Data.List(partition)+import Data.Set(Set)+import qualified UU.DData.Set as Set+import Data.Map(Map)+import qualified Data.Map as Map++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)++type PP_Docs = [PP_Doc]++ppMultiSeqH :: [PP_Doc] -> PP_Doc -> PP_Doc+ppMultiSeqH = ppMultiSeq' (>#<)++ppMultiSeqV :: [PP_Doc] -> PP_Doc -> PP_Doc+ppMultiSeqV = ppMultiSeq' (>-<)++ppMultiSeq' :: (PP_Doc -> PP_Doc -> PP_Doc) -> [PP_Doc] -> PP_Doc -> PP_Doc+ppMultiSeq' next strictArgs expr+  = foldr (\v r -> (v >#< "`seq`") `next` pp_parens r) expr strictArgs+++reallySimple :: String -> Bool+reallySimple = and . map (\x -> isAlphaNum x || x=='_')++ppTuple True  pps = "(" >|< pp_block " " (replicate (length pps `max` 1) ')') ",(" pps+ppTuple False pps = "(" >|< pp_block " " ")" "," pps+ppUnboxedTuple True pps  = "(# " >|< pp_block " " (concat $ replicate (length pps `max` 1) " #)") ",(# " pps+ppUnboxedTuple False pps = "(# " >|< pp_block " " " #)" "," pps+++locname' n = "_loc_" ++ getName n++renderDocs :: [PP_Doc] -> String+renderDocs pps = foldr (.) id (map (\d -> (disp d 50000) . ( '\n':) ) pps) ""++writeModule :: FilePath -> [PP_Doc] -> IO ()+writeModule path docs+  = do bExists <- doesFileExist path+       if bExists+        then do input <- readFile path+                seq (length input) (return ())+                if input /= output+                 then dumpIt+                 else return ()+        else dumpIt+  where+    output = renderDocs docs+    dumpIt = writeFile path output++-- Unboxed tuples+--   unbox  Whether unboxed tuples are wanted or not+--   inh    The inherited attributes. +--          If there are none, no unboxing can take place, +--          because in that case the semantic function (a top-level identifier) would have an unboxed type.+-- Of course we can't have an unboxed 1-tuple+mkTupleExpr :: Bool -> Bool -> Exprs -> Expr+mkTupleExpr unbox noInh exprs | not unbox || noInh || length exprs == 1 = TupleExpr exprs+                              | otherwise                               = UnboxedTupleExpr exprs+mkTupleType :: Bool -> Bool -> Types -> Type+mkTupleType unbox noInh tps | not unbox || noInh || length tps == 1 = TupleType tps+                            | otherwise                             = UnboxedTupleType tps+mkTupleLhs :: Bool -> Bool -> [String] -> Lhs+mkTupleLhs  unbox noInh comps | not unbox || noInh || length comps == 1 = TupleLhs comps+                              | otherwise                               = UnboxedTupleLhs comps+-- CaseAlt -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         nested               : Bool+         options              : Options+         outputfile           : String+      synthesized attribute:+         pps                  : PP_Docs+   alternatives:+      alternative CaseAlt:+         child left           : Lhs+         child expr           : Expr+-}+-- cata+sem_CaseAlt :: CaseAlt ->+               T_CaseAlt+sem_CaseAlt (CaseAlt _left _expr )  =+    (sem_CaseAlt_CaseAlt (sem_Lhs _left ) (sem_Expr _expr ) )+-- semantic domain+newtype T_CaseAlt = T_CaseAlt (Bool ->+                               Options ->+                               String ->+                               ( PP_Docs))+data Inh_CaseAlt = Inh_CaseAlt {nested_Inh_CaseAlt :: Bool,options_Inh_CaseAlt :: Options,outputfile_Inh_CaseAlt :: String}+data Syn_CaseAlt = Syn_CaseAlt {pps_Syn_CaseAlt :: PP_Docs}+wrap_CaseAlt (T_CaseAlt sem ) (Inh_CaseAlt _lhsInested _lhsIoptions _lhsIoutputfile )  =+    (let ( _lhsOpps) =+             (sem _lhsInested _lhsIoptions _lhsIoutputfile )+     in  (Syn_CaseAlt _lhsOpps ))+sem_CaseAlt_CaseAlt :: T_Lhs ->+                       T_Expr ->+                       T_CaseAlt+sem_CaseAlt_CaseAlt (T_Lhs left_ ) (T_Expr expr_ )  =+    (T_CaseAlt (\ _lhsInested+                  _lhsIoptions+                  _lhsIoutputfile ->+                    (let _lhsOpps :: PP_Docs+                         _leftOisDeclOfLet :: Bool+                         _leftOnested :: Bool+                         _leftOoptions :: Options+                         _leftOoutputfile :: String+                         _exprOnested :: Bool+                         _exprOoptions :: Options+                         _exprOoutputfile :: String+                         _leftIpp :: PP_Doc+                         _exprIpp :: PP_Doc+                         -- "PrintCode.ag"(line 149, column 16)+                         _lhsOpps =+                             ["{" >#< _leftIpp >#< "->", _exprIpp >#< "}"]+                         -- "PrintCode.ag"(line 303, column 7)+                         _leftOisDeclOfLet =+                             False+                         -- copy rule (down)+                         _leftOnested =+                             _lhsInested+                         -- copy rule (down)+                         _leftOoptions =+                             _lhsIoptions+                         -- copy rule (down)+                         _leftOoutputfile =+                             _lhsIoutputfile+                         -- copy rule (down)+                         _exprOnested =+                             _lhsInested+                         -- copy rule (down)+                         _exprOoptions =+                             _lhsIoptions+                         -- copy rule (down)+                         _exprOoutputfile =+                             _lhsIoutputfile+                         ( _leftIpp) =+                             (left_ _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile )+                         ( _exprIpp) =+                             (expr_ _exprOnested _exprOoptions _exprOoutputfile )+                     in  ( _lhsOpps))) )+-- CaseAlts ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         nested               : Bool+         options              : Options+         outputfile           : String+      synthesized attribute:+         pps                  : PP_Docs+   alternatives:+      alternative Cons:+         child hd             : CaseAlt+         child tl             : CaseAlts+      alternative Nil:+-}+-- cata+sem_CaseAlts :: CaseAlts ->+                T_CaseAlts+sem_CaseAlts list  =+    (Prelude.foldr sem_CaseAlts_Cons sem_CaseAlts_Nil (Prelude.map sem_CaseAlt list) )+-- semantic domain+newtype T_CaseAlts = T_CaseAlts (Bool ->+                                 Options ->+                                 String ->+                                 ( PP_Docs))+data Inh_CaseAlts = Inh_CaseAlts {nested_Inh_CaseAlts :: Bool,options_Inh_CaseAlts :: Options,outputfile_Inh_CaseAlts :: String}+data Syn_CaseAlts = Syn_CaseAlts {pps_Syn_CaseAlts :: PP_Docs}+wrap_CaseAlts (T_CaseAlts sem ) (Inh_CaseAlts _lhsInested _lhsIoptions _lhsIoutputfile )  =+    (let ( _lhsOpps) =+             (sem _lhsInested _lhsIoptions _lhsIoutputfile )+     in  (Syn_CaseAlts _lhsOpps ))+sem_CaseAlts_Cons :: T_CaseAlt ->+                     T_CaseAlts ->+                     T_CaseAlts+sem_CaseAlts_Cons (T_CaseAlt hd_ ) (T_CaseAlts tl_ )  =+    (T_CaseAlts (\ _lhsInested+                   _lhsIoptions+                   _lhsIoutputfile ->+                     (let _lhsOpps :: PP_Docs+                          _hdOnested :: Bool+                          _hdOoptions :: Options+                          _hdOoutputfile :: String+                          _tlOnested :: Bool+                          _tlOoptions :: Options+                          _tlOoutputfile :: String+                          _hdIpps :: PP_Docs+                          _tlIpps :: PP_Docs+                          -- "PrintCode.ag"(line 59, column 10)+                          _lhsOpps =+                              _hdIpps ++ _tlIpps+                          -- copy rule (down)+                          _hdOnested =+                              _lhsInested+                          -- copy rule (down)+                          _hdOoptions =+                              _lhsIoptions+                          -- copy rule (down)+                          _hdOoutputfile =+                              _lhsIoutputfile+                          -- copy rule (down)+                          _tlOnested =+                              _lhsInested+                          -- copy rule (down)+                          _tlOoptions =+                              _lhsIoptions+                          -- copy rule (down)+                          _tlOoutputfile =+                              _lhsIoutputfile+                          ( _hdIpps) =+                              (hd_ _hdOnested _hdOoptions _hdOoutputfile )+                          ( _tlIpps) =+                              (tl_ _tlOnested _tlOoptions _tlOoutputfile )+                      in  ( _lhsOpps))) )+sem_CaseAlts_Nil :: T_CaseAlts+sem_CaseAlts_Nil  =+    (T_CaseAlts (\ _lhsInested+                   _lhsIoptions+                   _lhsIoutputfile ->+                     (let _lhsOpps :: PP_Docs+                          -- "PrintCode.ag"(line 60, column 10)+                          _lhsOpps =+                              []+                      in  ( _lhsOpps))) )+-- Chunk -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         importBlocks         : PP_Doc+         isDeclOfLet          : Bool+         mainFile             : String+         mainName             : String+         moduleHeader         : String -> String -> String -> Bool -> String+         nested               : Bool+         options              : Options+         optionsLine          : String+         pragmaBlocks         : String+         textBlocks           : PP_Doc+      synthesized attributes:+         appendCommon         : [[PP_Doc]]+         appendMain           : [[PP_Doc]]+         genSems              : IO ()+         imports              : [String]+         pps                  : PP_Docs+   alternatives:+      alternative Chunk:+         child name           : {String}+         child comment        : Decl+         child info           : Decls+         child dataDef        : Decls+         child cataFun        : Decls+         child semDom         : Decls+         child semWrapper     : Decls+         child semFunctions   : Decls+         child semNames       : {[String]}+         visit 0:+            local outputfile  : _+            local exports     : _+-}+-- cata+sem_Chunk :: Chunk ->+             T_Chunk+sem_Chunk (Chunk _name _comment _info _dataDef _cataFun _semDom _semWrapper _semFunctions _semNames )  =+    (sem_Chunk_Chunk _name (sem_Decl _comment ) (sem_Decls _info ) (sem_Decls _dataDef ) (sem_Decls _cataFun ) (sem_Decls _semDom ) (sem_Decls _semWrapper ) (sem_Decls _semFunctions ) _semNames )+-- semantic domain+newtype T_Chunk = T_Chunk (PP_Doc ->+                           Bool ->+                           String ->+                           String ->+                           (String -> String -> String -> Bool -> String) ->+                           Bool ->+                           Options ->+                           String ->+                           String ->+                           PP_Doc ->+                           ( ([[PP_Doc]]),([[PP_Doc]]),(IO ()),([String]),PP_Docs))+data Inh_Chunk = Inh_Chunk {importBlocks_Inh_Chunk :: PP_Doc,isDeclOfLet_Inh_Chunk :: Bool,mainFile_Inh_Chunk :: String,mainName_Inh_Chunk :: String,moduleHeader_Inh_Chunk :: String -> String -> String -> Bool -> String,nested_Inh_Chunk :: Bool,options_Inh_Chunk :: Options,optionsLine_Inh_Chunk :: String,pragmaBlocks_Inh_Chunk :: String,textBlocks_Inh_Chunk :: PP_Doc}+data Syn_Chunk = Syn_Chunk {appendCommon_Syn_Chunk :: [[PP_Doc]],appendMain_Syn_Chunk :: [[PP_Doc]],genSems_Syn_Chunk :: IO (),imports_Syn_Chunk :: [String],pps_Syn_Chunk :: PP_Docs}+wrap_Chunk (T_Chunk sem ) (Inh_Chunk _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks )  =+    (let ( _lhsOappendCommon,_lhsOappendMain,_lhsOgenSems,_lhsOimports,_lhsOpps) =+             (sem _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks )+     in  (Syn_Chunk _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps ))+sem_Chunk_Chunk :: String ->+                   T_Decl ->+                   T_Decls ->+                   T_Decls ->+                   T_Decls ->+                   T_Decls ->+                   T_Decls ->+                   T_Decls ->+                   ([String]) ->+                   T_Chunk+sem_Chunk_Chunk name_ (T_Decl comment_ ) (T_Decls info_ ) (T_Decls dataDef_ ) (T_Decls cataFun_ ) (T_Decls semDom_ ) (T_Decls semWrapper_ ) (T_Decls semFunctions_ ) semNames_  =+    (T_Chunk (\ _lhsIimportBlocks+                _lhsIisDeclOfLet+                _lhsImainFile+                _lhsImainName+                _lhsImoduleHeader+                _lhsInested+                _lhsIoptions+                _lhsIoptionsLine+                _lhsIpragmaBlocks+                _lhsItextBlocks ->+                  (let _lhsOpps :: PP_Docs+                       _lhsOimports :: ([String])+                       _lhsOappendCommon :: ([[PP_Doc]])+                       _lhsOappendMain :: ([[PP_Doc]])+                       _lhsOgenSems :: (IO ())+                       _commentOisDeclOfLet :: Bool+                       _commentOnested :: Bool+                       _commentOoptions :: Options+                       _commentOoutputfile :: String+                       _infoOisDeclOfLet :: Bool+                       _infoOnested :: Bool+                       _infoOoptions :: Options+                       _infoOoutputfile :: String+                       _dataDefOisDeclOfLet :: Bool+                       _dataDefOnested :: Bool+                       _dataDefOoptions :: Options+                       _dataDefOoutputfile :: String+                       _cataFunOisDeclOfLet :: Bool+                       _cataFunOnested :: Bool+                       _cataFunOoptions :: Options+                       _cataFunOoutputfile :: String+                       _semDomOisDeclOfLet :: Bool+                       _semDomOnested :: Bool+                       _semDomOoptions :: Options+                       _semDomOoutputfile :: String+                       _semWrapperOisDeclOfLet :: Bool+                       _semWrapperOnested :: Bool+                       _semWrapperOoptions :: Options+                       _semWrapperOoutputfile :: String+                       _semFunctionsOisDeclOfLet :: Bool+                       _semFunctionsOnested :: Bool+                       _semFunctionsOoptions :: Options+                       _semFunctionsOoutputfile :: String+                       _commentIpp :: PP_Doc+                       _infoIpps :: PP_Docs+                       _dataDefIpps :: PP_Docs+                       _cataFunIpps :: PP_Docs+                       _semDomIpps :: PP_Docs+                       _semWrapperIpps :: PP_Docs+                       _semFunctionsIpps :: PP_Docs+                       -- "PrintCode.ag"(line 37, column 7)+                       _outputfile =+                           if sepSemMods _lhsIoptions+                           then _lhsImainFile ++ "_" ++ name_ ++ ".hs"+                           else _lhsImainFile ++ ".hs"+                       -- "PrintCode.ag"(line 83, column 16)+                       _lhsOpps =+                           _commentIpp+                           :  _infoIpps+                           ++ _dataDefIpps+                           ++ _cataFunIpps+                           ++ _semDomIpps+                           ++ _semWrapperIpps+                           ++ _semFunctionsIpps+                       -- "PrintCode.ag"(line 360, column 7)+                       _lhsOimports =+                           ["import " ++ _lhsImainName ++ "_" ++ name_ ++ "\n"]+                       -- "PrintCode.ag"(line 366, column 7)+                       _lhsOappendCommon =+                           [ [_commentIpp]+                           , _dataDefIpps+                           , _semDomIpps+                           ]+                       -- "PrintCode.ag"(line 371, column 7)+                       _lhsOappendMain =+                           [ [_commentIpp]+                           , _cataFunIpps+                           , _semWrapperIpps+                           ]+                       -- "PrintCode.ag"(line 381, column 7)+                       _lhsOgenSems =+                           writeModule _outputfile+                             [ pp $ _lhsIpragmaBlocks+                             , pp $ _lhsIoptionsLine+                             , pp $ _lhsImoduleHeader _lhsImainName ("_" ++ name_) _exports     True+                             , pp $ ("import " ++ _lhsImainName ++ "_common\n")+                             , _commentIpp+                             , vlist_sep "" _infoIpps+                             , vlist_sep "" _semFunctionsIpps+                             ]+                       -- "PrintCode.ag"(line 394, column 7)+                       _exports =+                           concat $ intersperse "," semNames_+                       -- copy rule (down)+                       _commentOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _commentOnested =+                           _lhsInested+                       -- copy rule (down)+                       _commentOoptions =+                           _lhsIoptions+                       -- copy rule (from local)+                       _commentOoutputfile =+                           _outputfile+                       -- copy rule (down)+                       _infoOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _infoOnested =+                           _lhsInested+                       -- copy rule (down)+                       _infoOoptions =+                           _lhsIoptions+                       -- copy rule (from local)+                       _infoOoutputfile =+                           _outputfile+                       -- copy rule (down)+                       _dataDefOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _dataDefOnested =+                           _lhsInested+                       -- copy rule (down)+                       _dataDefOoptions =+                           _lhsIoptions+                       -- copy rule (from local)+                       _dataDefOoutputfile =+                           _outputfile+                       -- copy rule (down)+                       _cataFunOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _cataFunOnested =+                           _lhsInested+                       -- copy rule (down)+                       _cataFunOoptions =+                           _lhsIoptions+                       -- copy rule (from local)+                       _cataFunOoutputfile =+                           _outputfile+                       -- copy rule (down)+                       _semDomOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _semDomOnested =+                           _lhsInested+                       -- copy rule (down)+                       _semDomOoptions =+                           _lhsIoptions+                       -- copy rule (from local)+                       _semDomOoutputfile =+                           _outputfile+                       -- copy rule (down)+                       _semWrapperOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _semWrapperOnested =+                           _lhsInested+                       -- copy rule (down)+                       _semWrapperOoptions =+                           _lhsIoptions+                       -- copy rule (from local)+                       _semWrapperOoutputfile =+                           _outputfile+                       -- copy rule (down)+                       _semFunctionsOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _semFunctionsOnested =+                           _lhsInested+                       -- copy rule (down)+                       _semFunctionsOoptions =+                           _lhsIoptions+                       -- copy rule (from local)+                       _semFunctionsOoutputfile =+                           _outputfile+                       ( _commentIpp) =+                           (comment_ _commentOisDeclOfLet _commentOnested _commentOoptions _commentOoutputfile )+                       ( _infoIpps) =+                           (info_ _infoOisDeclOfLet _infoOnested _infoOoptions _infoOoutputfile )+                       ( _dataDefIpps) =+                           (dataDef_ _dataDefOisDeclOfLet _dataDefOnested _dataDefOoptions _dataDefOoutputfile )+                       ( _cataFunIpps) =+                           (cataFun_ _cataFunOisDeclOfLet _cataFunOnested _cataFunOoptions _cataFunOoutputfile )+                       ( _semDomIpps) =+                           (semDom_ _semDomOisDeclOfLet _semDomOnested _semDomOoptions _semDomOoutputfile )+                       ( _semWrapperIpps) =+                           (semWrapper_ _semWrapperOisDeclOfLet _semWrapperOnested _semWrapperOoptions _semWrapperOoutputfile )+                       ( _semFunctionsIpps) =+                           (semFunctions_ _semFunctionsOisDeclOfLet _semFunctionsOnested _semFunctionsOoptions _semFunctionsOoutputfile )+                   in  ( _lhsOappendCommon,_lhsOappendMain,_lhsOgenSems,_lhsOimports,_lhsOpps))) )+-- Chunks ------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         importBlocks         : PP_Doc+         isDeclOfLet          : Bool+         mainFile             : String+         mainName             : String+         moduleHeader         : String -> String -> String -> Bool -> String+         nested               : Bool+         options              : Options+         optionsLine          : String+         pragmaBlocks         : String+         textBlocks           : PP_Doc+      synthesized attributes:+         appendCommon         : [[PP_Doc]]+         appendMain           : [[PP_Doc]]+         genSems              : IO ()+         imports              : [String]+         pps                  : PP_Docs+   alternatives:+      alternative Cons:+         child hd             : Chunk+         child tl             : Chunks+      alternative Nil:+-}+-- cata+sem_Chunks :: Chunks ->+              T_Chunks+sem_Chunks list  =+    (Prelude.foldr sem_Chunks_Cons sem_Chunks_Nil (Prelude.map sem_Chunk list) )+-- semantic domain+newtype T_Chunks = T_Chunks (PP_Doc ->+                             Bool ->+                             String ->+                             String ->+                             (String -> String -> String -> Bool -> String) ->+                             Bool ->+                             Options ->+                             String ->+                             String ->+                             PP_Doc ->+                             ( ([[PP_Doc]]),([[PP_Doc]]),(IO ()),([String]),PP_Docs))+data Inh_Chunks = Inh_Chunks {importBlocks_Inh_Chunks :: PP_Doc,isDeclOfLet_Inh_Chunks :: Bool,mainFile_Inh_Chunks :: String,mainName_Inh_Chunks :: String,moduleHeader_Inh_Chunks :: String -> String -> String -> Bool -> String,nested_Inh_Chunks :: Bool,options_Inh_Chunks :: Options,optionsLine_Inh_Chunks :: String,pragmaBlocks_Inh_Chunks :: String,textBlocks_Inh_Chunks :: PP_Doc}+data Syn_Chunks = Syn_Chunks {appendCommon_Syn_Chunks :: [[PP_Doc]],appendMain_Syn_Chunks :: [[PP_Doc]],genSems_Syn_Chunks :: IO (),imports_Syn_Chunks :: [String],pps_Syn_Chunks :: PP_Docs}+wrap_Chunks (T_Chunks sem ) (Inh_Chunks _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks )  =+    (let ( _lhsOappendCommon,_lhsOappendMain,_lhsOgenSems,_lhsOimports,_lhsOpps) =+             (sem _lhsIimportBlocks _lhsIisDeclOfLet _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsInested _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks )+     in  (Syn_Chunks _lhsOappendCommon _lhsOappendMain _lhsOgenSems _lhsOimports _lhsOpps ))+sem_Chunks_Cons :: T_Chunk ->+                   T_Chunks ->+                   T_Chunks+sem_Chunks_Cons (T_Chunk hd_ ) (T_Chunks tl_ )  =+    (T_Chunks (\ _lhsIimportBlocks+                 _lhsIisDeclOfLet+                 _lhsImainFile+                 _lhsImainName+                 _lhsImoduleHeader+                 _lhsInested+                 _lhsIoptions+                 _lhsIoptionsLine+                 _lhsIpragmaBlocks+                 _lhsItextBlocks ->+                   (let _lhsOpps :: PP_Docs+                        _lhsOappendCommon :: ([[PP_Doc]])+                        _lhsOappendMain :: ([[PP_Doc]])+                        _lhsOgenSems :: (IO ())+                        _lhsOimports :: ([String])+                        _hdOimportBlocks :: PP_Doc+                        _hdOisDeclOfLet :: Bool+                        _hdOmainFile :: String+                        _hdOmainName :: String+                        _hdOmoduleHeader :: (String -> String -> String -> Bool -> String)+                        _hdOnested :: Bool+                        _hdOoptions :: Options+                        _hdOoptionsLine :: String+                        _hdOpragmaBlocks :: String+                        _hdOtextBlocks :: PP_Doc+                        _tlOimportBlocks :: PP_Doc+                        _tlOisDeclOfLet :: Bool+                        _tlOmainFile :: String+                        _tlOmainName :: String+                        _tlOmoduleHeader :: (String -> String -> String -> Bool -> String)+                        _tlOnested :: Bool+                        _tlOoptions :: Options+                        _tlOoptionsLine :: String+                        _tlOpragmaBlocks :: String+                        _tlOtextBlocks :: PP_Doc+                        _hdIappendCommon :: ([[PP_Doc]])+                        _hdIappendMain :: ([[PP_Doc]])+                        _hdIgenSems :: (IO ())+                        _hdIimports :: ([String])+                        _hdIpps :: PP_Docs+                        _tlIappendCommon :: ([[PP_Doc]])+                        _tlIappendMain :: ([[PP_Doc]])+                        _tlIgenSems :: (IO ())+                        _tlIimports :: ([String])+                        _tlIpps :: PP_Docs+                        -- "PrintCode.ag"(line 75, column 10)+                        _lhsOpps =+                            _hdIpps ++ _tlIpps+                        -- use rule "PrintCode.ag"(line 362, column 50)+                        _lhsOappendCommon =+                            _hdIappendCommon ++ _tlIappendCommon+                        -- use rule "PrintCode.ag"(line 362, column 50)+                        _lhsOappendMain =+                            _hdIappendMain ++ _tlIappendMain+                        -- use rule "PrintCode.ag"(line 377, column 33)+                        _lhsOgenSems =+                            _hdIgenSems >> _tlIgenSems+                        -- use rule "PrintCode.ag"(line 357, column 33)+                        _lhsOimports =+                            _hdIimports ++ _tlIimports+                        -- copy rule (down)+                        _hdOimportBlocks =+                            _lhsIimportBlocks+                        -- copy rule (down)+                        _hdOisDeclOfLet =+                            _lhsIisDeclOfLet+                        -- copy rule (down)+                        _hdOmainFile =+                            _lhsImainFile+                        -- copy rule (down)+                        _hdOmainName =+                            _lhsImainName+                        -- copy rule (down)+                        _hdOmoduleHeader =+                            _lhsImoduleHeader+                        -- copy rule (down)+                        _hdOnested =+                            _lhsInested+                        -- copy rule (down)+                        _hdOoptions =+                            _lhsIoptions+                        -- copy rule (down)+                        _hdOoptionsLine =+                            _lhsIoptionsLine+                        -- copy rule (down)+                        _hdOpragmaBlocks =+                            _lhsIpragmaBlocks+                        -- copy rule (down)+                        _hdOtextBlocks =+                            _lhsItextBlocks+                        -- copy rule (down)+                        _tlOimportBlocks =+                            _lhsIimportBlocks+                        -- copy rule (down)+                        _tlOisDeclOfLet =+                            _lhsIisDeclOfLet+                        -- copy rule (down)+                        _tlOmainFile =+                            _lhsImainFile+                        -- copy rule (down)+                        _tlOmainName =+                            _lhsImainName+                        -- copy rule (down)+                        _tlOmoduleHeader =+                            _lhsImoduleHeader+                        -- copy rule (down)+                        _tlOnested =+                            _lhsInested+                        -- copy rule (down)+                        _tlOoptions =+                            _lhsIoptions+                        -- copy rule (down)+                        _tlOoptionsLine =+                            _lhsIoptionsLine+                        -- copy rule (down)+                        _tlOpragmaBlocks =+                            _lhsIpragmaBlocks+                        -- copy rule (down)+                        _tlOtextBlocks =+                            _lhsItextBlocks+                        ( _hdIappendCommon,_hdIappendMain,_hdIgenSems,_hdIimports,_hdIpps) =+                            (hd_ _hdOimportBlocks _hdOisDeclOfLet _hdOmainFile _hdOmainName _hdOmoduleHeader _hdOnested _hdOoptions _hdOoptionsLine _hdOpragmaBlocks _hdOtextBlocks )+                        ( _tlIappendCommon,_tlIappendMain,_tlIgenSems,_tlIimports,_tlIpps) =+                            (tl_ _tlOimportBlocks _tlOisDeclOfLet _tlOmainFile _tlOmainName _tlOmoduleHeader _tlOnested _tlOoptions _tlOoptionsLine _tlOpragmaBlocks _tlOtextBlocks )+                    in  ( _lhsOappendCommon,_lhsOappendMain,_lhsOgenSems,_lhsOimports,_lhsOpps))) )+sem_Chunks_Nil :: T_Chunks+sem_Chunks_Nil  =+    (T_Chunks (\ _lhsIimportBlocks+                 _lhsIisDeclOfLet+                 _lhsImainFile+                 _lhsImainName+                 _lhsImoduleHeader+                 _lhsInested+                 _lhsIoptions+                 _lhsIoptionsLine+                 _lhsIpragmaBlocks+                 _lhsItextBlocks ->+                   (let _lhsOpps :: PP_Docs+                        _lhsOappendCommon :: ([[PP_Doc]])+                        _lhsOappendMain :: ([[PP_Doc]])+                        _lhsOgenSems :: (IO ())+                        _lhsOimports :: ([String])+                        -- "PrintCode.ag"(line 76, column 10)+                        _lhsOpps =+                            []+                        -- use rule "PrintCode.ag"(line 362, column 50)+                        _lhsOappendCommon =+                            []+                        -- use rule "PrintCode.ag"(line 362, column 50)+                        _lhsOappendMain =+                            []+                        -- use rule "PrintCode.ag"(line 377, column 33)+                        _lhsOgenSems =+                            return ()+                        -- use rule "PrintCode.ag"(line 357, column 33)+                        _lhsOimports =+                            []+                    in  ( _lhsOappendCommon,_lhsOappendMain,_lhsOgenSems,_lhsOimports,_lhsOpps))) )+-- DataAlt -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         nested               : Bool+         strictPre            : PP_Doc+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative DataAlt:+         child name           : {String}+         child args           : {[String]}+      alternative Record:+         child name           : {String}+         child args           : {[(String,String)]}+-}+-- cata+sem_DataAlt :: DataAlt ->+               T_DataAlt+sem_DataAlt (DataAlt _name _args )  =+    (sem_DataAlt_DataAlt _name _args )+sem_DataAlt (Record _name _args )  =+    (sem_DataAlt_Record _name _args )+-- semantic domain+newtype T_DataAlt = T_DataAlt (Bool ->+                               PP_Doc ->+                               ( PP_Doc))+data Inh_DataAlt = Inh_DataAlt {nested_Inh_DataAlt :: Bool,strictPre_Inh_DataAlt :: PP_Doc}+data Syn_DataAlt = Syn_DataAlt {pp_Syn_DataAlt :: PP_Doc}+wrap_DataAlt (T_DataAlt sem ) (Inh_DataAlt _lhsInested _lhsIstrictPre )  =+    (let ( _lhsOpp) =+             (sem _lhsInested _lhsIstrictPre )+     in  (Syn_DataAlt _lhsOpp ))+sem_DataAlt_DataAlt :: String ->+                       ([String]) ->+                       T_DataAlt+sem_DataAlt_DataAlt name_ args_  =+    (T_DataAlt (\ _lhsInested+                  _lhsIstrictPre ->+                    (let _lhsOpp :: PP_Doc+                         -- "PrintCode.ag"(line 152, column 16)+                         _lhsOpp =+                             name_ >#< hv_sp (map ((_lhsIstrictPre >|<) . pp_parens . text) args_)+                     in  ( _lhsOpp))) )+sem_DataAlt_Record :: String ->+                      ([(String,String)]) ->+                      T_DataAlt+sem_DataAlt_Record name_ args_  =+    (T_DataAlt (\ _lhsInested+                  _lhsIstrictPre ->+                    (let _lhsOpp :: PP_Doc+                         -- "PrintCode.ag"(line 153, column 16)+                         _lhsOpp =+                             name_ >#< pp_block "{" "}" ","+                                                [ f >#< "::" >#< t | (f,t) <- args_ ]+                     in  ( _lhsOpp))) )+-- DataAlts ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         nested               : Bool+         strictPre            : PP_Doc+      synthesized attribute:+         pps                  : PP_Docs+   alternatives:+      alternative Cons:+         child hd             : DataAlt+         child tl             : DataAlts+      alternative Nil:+-}+-- cata+sem_DataAlts :: DataAlts ->+                T_DataAlts+sem_DataAlts list  =+    (Prelude.foldr sem_DataAlts_Cons sem_DataAlts_Nil (Prelude.map sem_DataAlt list) )+-- semantic domain+newtype T_DataAlts = T_DataAlts (Bool ->+                                 PP_Doc ->+                                 ( PP_Docs))+data Inh_DataAlts = Inh_DataAlts {nested_Inh_DataAlts :: Bool,strictPre_Inh_DataAlts :: PP_Doc}+data Syn_DataAlts = Syn_DataAlts {pps_Syn_DataAlts :: PP_Docs}+wrap_DataAlts (T_DataAlts sem ) (Inh_DataAlts _lhsInested _lhsIstrictPre )  =+    (let ( _lhsOpps) =+             (sem _lhsInested _lhsIstrictPre )+     in  (Syn_DataAlts _lhsOpps ))+sem_DataAlts_Cons :: T_DataAlt ->+                     T_DataAlts ->+                     T_DataAlts+sem_DataAlts_Cons (T_DataAlt hd_ ) (T_DataAlts tl_ )  =+    (T_DataAlts (\ _lhsInested+                   _lhsIstrictPre ->+                     (let _lhsOpps :: PP_Docs+                          _hdOnested :: Bool+                          _hdOstrictPre :: PP_Doc+                          _tlOnested :: Bool+                          _tlOstrictPre :: PP_Doc+                          _hdIpp :: PP_Doc+                          _tlIpps :: PP_Docs+                          -- "PrintCode.ag"(line 63, column 10)+                          _lhsOpps =+                              _hdIpp : _tlIpps+                          -- copy rule (down)+                          _hdOnested =+                              _lhsInested+                          -- copy rule (down)+                          _hdOstrictPre =+                              _lhsIstrictPre+                          -- copy rule (down)+                          _tlOnested =+                              _lhsInested+                          -- copy rule (down)+                          _tlOstrictPre =+                              _lhsIstrictPre+                          ( _hdIpp) =+                              (hd_ _hdOnested _hdOstrictPre )+                          ( _tlIpps) =+                              (tl_ _tlOnested _tlOstrictPre )+                      in  ( _lhsOpps))) )+sem_DataAlts_Nil :: T_DataAlts+sem_DataAlts_Nil  =+    (T_DataAlts (\ _lhsInested+                   _lhsIstrictPre ->+                     (let _lhsOpps :: PP_Docs+                          -- "PrintCode.ag"(line 64, column 10)+                          _lhsOpps =+                              []+                      in  ( _lhsOpps))) )+-- Decl --------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         isDeclOfLet          : Bool+         nested               : Bool+         options              : Options+         outputfile           : String+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Comment:+         child txt            : {String}+      alternative Data:+         child name           : {String}+         child alts           : DataAlts+         child strict         : {Bool}+         child derivings      : {[String]}+      alternative Decl:+         child left           : Lhs+         child rhs            : Expr+         child binds          : {Set String}+         child uses           : {Set String}+      alternative NewType:+         child name           : {String}+         child con            : {String}+         child tp             : Type+      alternative PragmaDecl:+         child txt            : {String}+      alternative TSig:+         child name           : {String}+         child tp             : Type+      alternative Type:+         child name           : {String}+         child tp             : Type+-}+-- cata+sem_Decl :: Decl ->+            T_Decl+sem_Decl (Comment _txt )  =+    (sem_Decl_Comment _txt )+sem_Decl (Data _name _alts _strict _derivings )  =+    (sem_Decl_Data _name (sem_DataAlts _alts ) _strict _derivings )+sem_Decl (Decl _left _rhs _binds _uses )  =+    (sem_Decl_Decl (sem_Lhs _left ) (sem_Expr _rhs ) _binds _uses )+sem_Decl (NewType _name _con _tp )  =+    (sem_Decl_NewType _name _con (sem_Type _tp ) )+sem_Decl (PragmaDecl _txt )  =+    (sem_Decl_PragmaDecl _txt )+sem_Decl (TSig _name _tp )  =+    (sem_Decl_TSig _name (sem_Type _tp ) )+sem_Decl (Type _name _tp )  =+    (sem_Decl_Type _name (sem_Type _tp ) )+-- semantic domain+newtype T_Decl = T_Decl (Bool ->+                         Bool ->+                         Options ->+                         String ->+                         ( PP_Doc))+data Inh_Decl = Inh_Decl {isDeclOfLet_Inh_Decl :: Bool,nested_Inh_Decl :: Bool,options_Inh_Decl :: Options,outputfile_Inh_Decl :: String}+data Syn_Decl = Syn_Decl {pp_Syn_Decl :: PP_Doc}+wrap_Decl (T_Decl sem ) (Inh_Decl _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile )  =+    (let ( _lhsOpp) =+             (sem _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile )+     in  (Syn_Decl _lhsOpp ))+sem_Decl_Comment :: String ->+                    T_Decl+sem_Decl_Comment txt_  =+    (T_Decl (\ _lhsIisDeclOfLet+               _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      -- "PrintCode.ag"(line 106, column 16)+                      _lhsOpp =+                          if '\n' `elem` txt_+                            then "{-" >-< vlist (lines txt_) >-< "-}"+                            else "--" >#< txt_+                  in  ( _lhsOpp))) )+sem_Decl_Data :: String ->+                 T_DataAlts ->+                 Bool ->+                 ([String]) ->+                 T_Decl+sem_Decl_Data name_ (T_DataAlts alts_ ) strict_ derivings_  =+    (T_Decl (\ _lhsIisDeclOfLet+               _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _altsOstrictPre :: PP_Doc+                      _altsOnested :: Bool+                      _altsIpps :: PP_Docs+                      -- "PrintCode.ag"(line 94, column 16)+                      _lhsOpp =+                          "data" >#< name_+                          >#<  ( case _altsIpps of+                                       [] -> empty+                                       (x:xs) ->              "=" >#<  x+                                              >-< vlist (map ("|" >#<) xs)+                                  >-< if null derivings_+                                         then empty+                                         else "deriving" >#< ppTuple False (map text derivings_)+                               )+                      -- "PrintCode.ag"(line 218, column 10)+                      _altsOstrictPre =+                          if strict_ then pp "!" else empty+                      -- copy rule (down)+                      _altsOnested =+                          _lhsInested+                      ( _altsIpps) =+                          (alts_ _altsOnested _altsOstrictPre )+                  in  ( _lhsOpp))) )+sem_Decl_Decl :: T_Lhs ->+                 T_Expr ->+                 (Set String) ->+                 (Set String) ->+                 T_Decl+sem_Decl_Decl (T_Lhs left_ ) (T_Expr rhs_ ) binds_ uses_  =+    (T_Decl (\ _lhsIisDeclOfLet+               _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _leftOisDeclOfLet :: Bool+                      _leftOnested :: Bool+                      _leftOoptions :: Options+                      _leftOoutputfile :: String+                      _rhsOnested :: Bool+                      _rhsOoptions :: Options+                      _rhsOoutputfile :: String+                      _leftIpp :: PP_Doc+                      _rhsIpp :: PP_Doc+                      -- "PrintCode.ag"(line 92, column 16)+                      _lhsOpp =+                          _leftIpp >#< "="+                          >-< indent 4 _rhsIpp+                      -- copy rule (down)+                      _leftOisDeclOfLet =+                          _lhsIisDeclOfLet+                      -- copy rule (down)+                      _leftOnested =+                          _lhsInested+                      -- copy rule (down)+                      _leftOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _leftOoutputfile =+                          _lhsIoutputfile+                      -- copy rule (down)+                      _rhsOnested =+                          _lhsInested+                      -- copy rule (down)+                      _rhsOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _rhsOoutputfile =+                          _lhsIoutputfile+                      ( _leftIpp) =+                          (left_ _leftOisDeclOfLet _leftOnested _leftOoptions _leftOoutputfile )+                      ( _rhsIpp) =+                          (rhs_ _rhsOnested _rhsOoptions _rhsOoutputfile )+                  in  ( _lhsOpp))) )+sem_Decl_NewType :: String ->+                    String ->+                    T_Type ->+                    T_Decl+sem_Decl_NewType name_ con_ (T_Type tp_ )  =+    (T_Decl (\ _lhsIisDeclOfLet+               _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _tpOnested :: Bool+                      _tpIpp :: PP_Doc+                      _tpIprec :: Int+                      -- "PrintCode.ag"(line 103, column 16)+                      _lhsOpp =+                          "newtype" >#< name_ >#< "=" >#< con_ >#< pp_parens _tpIpp+                      -- copy rule (down)+                      _tpOnested =+                          _lhsInested+                      ( _tpIpp,_tpIprec) =+                          (tp_ _tpOnested )+                  in  ( _lhsOpp))) )+sem_Decl_PragmaDecl :: String ->+                       T_Decl+sem_Decl_PragmaDecl txt_  =+    (T_Decl (\ _lhsIisDeclOfLet+               _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      -- "PrintCode.ag"(line 109, column 16)+                      _lhsOpp =+                          "{-#" >#< text txt_ >#< "#-}"+                  in  ( _lhsOpp))) )+sem_Decl_TSig :: String ->+                 T_Type ->+                 T_Decl+sem_Decl_TSig name_ (T_Type tp_ )  =+    (T_Decl (\ _lhsIisDeclOfLet+               _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _tpOnested :: Bool+                      _tpIpp :: PP_Doc+                      _tpIprec :: Int+                      -- "PrintCode.ag"(line 105, column 16)+                      _lhsOpp =+                          name_ >#< "::" >#< _tpIpp+                      -- copy rule (down)+                      _tpOnested =+                          _lhsInested+                      ( _tpIpp,_tpIprec) =+                          (tp_ _tpOnested )+                  in  ( _lhsOpp))) )+sem_Decl_Type :: String ->+                 T_Type ->+                 T_Decl+sem_Decl_Type name_ (T_Type tp_ )  =+    (T_Decl (\ _lhsIisDeclOfLet+               _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _tpOnested :: Bool+                      _tpIpp :: PP_Doc+                      _tpIprec :: Int+                      -- "PrintCode.ag"(line 104, column 16)+                      _lhsOpp =+                          "type" >#< name_ >#< "=" >#<  _tpIpp+                      -- copy rule (down)+                      _tpOnested =+                          _lhsInested+                      ( _tpIpp,_tpIprec) =+                          (tp_ _tpOnested )+                  in  ( _lhsOpp))) )+-- Decls -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         isDeclOfLet          : Bool+         nested               : Bool+         options              : Options+         outputfile           : String+      synthesized attribute:+         pps                  : PP_Docs+   alternatives:+      alternative Cons:+         child hd             : Decl+         child tl             : Decls+      alternative Nil:+-}+-- cata+sem_Decls :: Decls ->+             T_Decls+sem_Decls list  =+    (Prelude.foldr sem_Decls_Cons sem_Decls_Nil (Prelude.map sem_Decl list) )+-- semantic domain+newtype T_Decls = T_Decls (Bool ->+                           Bool ->+                           Options ->+                           String ->+                           ( PP_Docs))+data Inh_Decls = Inh_Decls {isDeclOfLet_Inh_Decls :: Bool,nested_Inh_Decls :: Bool,options_Inh_Decls :: Options,outputfile_Inh_Decls :: String}+data Syn_Decls = Syn_Decls {pps_Syn_Decls :: PP_Docs}+wrap_Decls (T_Decls sem ) (Inh_Decls _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile )  =+    (let ( _lhsOpps) =+             (sem _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile )+     in  (Syn_Decls _lhsOpps ))+sem_Decls_Cons :: T_Decl ->+                  T_Decls ->+                  T_Decls+sem_Decls_Cons (T_Decl hd_ ) (T_Decls tl_ )  =+    (T_Decls (\ _lhsIisDeclOfLet+                _lhsInested+                _lhsIoptions+                _lhsIoutputfile ->+                  (let _lhsOpps :: PP_Docs+                       _hdOisDeclOfLet :: Bool+                       _hdOnested :: Bool+                       _hdOoptions :: Options+                       _hdOoutputfile :: String+                       _tlOisDeclOfLet :: Bool+                       _tlOnested :: Bool+                       _tlOoptions :: Options+                       _tlOoutputfile :: String+                       _hdIpp :: PP_Doc+                       _tlIpps :: PP_Docs+                       -- "PrintCode.ag"(line 71, column 10)+                       _lhsOpps =+                           _hdIpp : _tlIpps+                       -- copy rule (down)+                       _hdOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _hdOnested =+                           _lhsInested+                       -- copy rule (down)+                       _hdOoptions =+                           _lhsIoptions+                       -- copy rule (down)+                       _hdOoutputfile =+                           _lhsIoutputfile+                       -- copy rule (down)+                       _tlOisDeclOfLet =+                           _lhsIisDeclOfLet+                       -- copy rule (down)+                       _tlOnested =+                           _lhsInested+                       -- copy rule (down)+                       _tlOoptions =+                           _lhsIoptions+                       -- copy rule (down)+                       _tlOoutputfile =+                           _lhsIoutputfile+                       ( _hdIpp) =+                           (hd_ _hdOisDeclOfLet _hdOnested _hdOoptions _hdOoutputfile )+                       ( _tlIpps) =+                           (tl_ _tlOisDeclOfLet _tlOnested _tlOoptions _tlOoutputfile )+                   in  ( _lhsOpps))) )+sem_Decls_Nil :: T_Decls+sem_Decls_Nil  =+    (T_Decls (\ _lhsIisDeclOfLet+                _lhsInested+                _lhsIoptions+                _lhsIoutputfile ->+                  (let _lhsOpps :: PP_Docs+                       -- "PrintCode.ag"(line 72, column 10)+                       _lhsOpps =+                           []+                   in  ( _lhsOpps))) )+-- Expr --------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         nested               : Bool+         options              : Options+         outputfile           : String+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative App:+         child name           : {String}+         child args           : Exprs+      alternative Case:+         child expr           : Expr+         child alts           : CaseAlts+      alternative Lambda:+         child args           : {[String]}+         child body           : Expr+         visit 0:+            local strictParams : _+            local addBang     : _+      alternative Let:+         child decls          : Decls+         child body           : Expr+      alternative LineExpr:+         child expr           : Expr+      alternative PragmaExpr:+         child onLeftSide     : {Bool}+         child onNewLine      : {Bool}+         child txt            : {String}+         child expr           : Expr+      alternative SimpleExpr:+         child txt            : {String}+      alternative TextExpr:+         child lns            : {[String]}+      alternative Trace:+         child txt            : {String}+         child expr           : Expr+      alternative TupleExpr:+         child exprs          : Exprs+      alternative UnboxedTupleExpr:+         child exprs          : Exprs+-}+-- cata+sem_Expr :: Expr ->+            T_Expr+sem_Expr (App _name _args )  =+    (sem_Expr_App _name (sem_Exprs _args ) )+sem_Expr (Case _expr _alts )  =+    (sem_Expr_Case (sem_Expr _expr ) (sem_CaseAlts _alts ) )+sem_Expr (Lambda _args _body )  =+    (sem_Expr_Lambda _args (sem_Expr _body ) )+sem_Expr (Let _decls _body )  =+    (sem_Expr_Let (sem_Decls _decls ) (sem_Expr _body ) )+sem_Expr (LineExpr _expr )  =+    (sem_Expr_LineExpr (sem_Expr _expr ) )+sem_Expr (PragmaExpr _onLeftSide _onNewLine _txt _expr )  =+    (sem_Expr_PragmaExpr _onLeftSide _onNewLine _txt (sem_Expr _expr ) )+sem_Expr (SimpleExpr _txt )  =+    (sem_Expr_SimpleExpr _txt )+sem_Expr (TextExpr _lns )  =+    (sem_Expr_TextExpr _lns )+sem_Expr (Trace _txt _expr )  =+    (sem_Expr_Trace _txt (sem_Expr _expr ) )+sem_Expr (TupleExpr _exprs )  =+    (sem_Expr_TupleExpr (sem_Exprs _exprs ) )+sem_Expr (UnboxedTupleExpr _exprs )  =+    (sem_Expr_UnboxedTupleExpr (sem_Exprs _exprs ) )+-- semantic domain+newtype T_Expr = T_Expr (Bool ->+                         Options ->+                         String ->+                         ( PP_Doc))+data Inh_Expr = Inh_Expr {nested_Inh_Expr :: Bool,options_Inh_Expr :: Options,outputfile_Inh_Expr :: String}+data Syn_Expr = Syn_Expr {pp_Syn_Expr :: PP_Doc}+wrap_Expr (T_Expr sem ) (Inh_Expr _lhsInested _lhsIoptions _lhsIoutputfile )  =+    (let ( _lhsOpp) =+             (sem _lhsInested _lhsIoptions _lhsIoutputfile )+     in  (Syn_Expr _lhsOpp ))+sem_Expr_App :: String ->+                T_Exprs ->+                T_Expr+sem_Expr_App name_ (T_Exprs args_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _argsOnested :: Bool+                      _argsOoptions :: Options+                      _argsOoutputfile :: String+                      _argsIpps :: PP_Docs+                      -- "PrintCode.ag"(line 129, column 16)+                      _lhsOpp =+                          pp_parens $ name_ >#< hv_sp _argsIpps+                      -- copy rule (down)+                      _argsOnested =+                          _lhsInested+                      -- copy rule (down)+                      _argsOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _argsOoutputfile =+                          _lhsIoutputfile+                      ( _argsIpps) =+                          (args_ _argsOnested _argsOoptions _argsOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_Case :: T_Expr ->+                 T_CaseAlts ->+                 T_Expr+sem_Expr_Case (T_Expr expr_ ) (T_CaseAlts alts_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _exprOnested :: Bool+                      _exprOoptions :: Options+                      _exprOoutputfile :: String+                      _altsOnested :: Bool+                      _altsOoptions :: Options+                      _altsOoutputfile :: String+                      _exprIpp :: PP_Doc+                      _altsIpps :: PP_Docs+                      -- "PrintCode.ag"(line 115, column 16)+                      _lhsOpp =+                          pp_parens (    "case" >#< pp_parens _exprIpp >#< "of"+                                    >-< (vlist _altsIpps)+                                    )+                      -- copy rule (down)+                      _exprOnested =+                          _lhsInested+                      -- copy rule (down)+                      _exprOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _exprOoutputfile =+                          _lhsIoutputfile+                      -- copy rule (down)+                      _altsOnested =+                          _lhsInested+                      -- copy rule (down)+                      _altsOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _altsOoutputfile =+                          _lhsIoutputfile+                      ( _exprIpp) =+                          (expr_ _exprOnested _exprOoptions _exprOoutputfile )+                      ( _altsIpps) =+                          (alts_ _altsOnested _altsOoptions _altsOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_Lambda :: ([String]) ->+                   T_Expr ->+                   T_Expr+sem_Expr_Lambda args_ (T_Expr body_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _bodyOnested :: Bool+                      _bodyOoptions :: Options+                      _bodyOoutputfile :: String+                      _bodyIpp :: PP_Doc+                      -- "PrintCode.ag"(line 118, column 16)+                      _strictParams =+                          if strictSems _lhsIoptions+                          then map text args_+                          else []+                      -- "PrintCode.ag"(line 121, column 16)+                      _addBang =+                          if bangpats _lhsIoptions+                          then \p -> pp_parens ("!" >|< p)+                          else id+                      -- "PrintCode.ag"(line 124, column 16)+                      _lhsOpp =+                          pp_parens (    "\\" >#< (vlist (map (_addBang     . pp) args_)) >#< "->"+                                    >-< indent 4 (_strictParams     `ppMultiSeqV` _bodyIpp)+                                    )+                      -- copy rule (down)+                      _bodyOnested =+                          _lhsInested+                      -- copy rule (down)+                      _bodyOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _bodyOoutputfile =+                          _lhsIoutputfile+                      ( _bodyIpp) =+                          (body_ _bodyOnested _bodyOoptions _bodyOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_Let :: T_Decls ->+                T_Expr ->+                T_Expr+sem_Expr_Let (T_Decls decls_ ) (T_Expr body_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _declsOisDeclOfLet :: Bool+                      _declsOnested :: Bool+                      _declsOoptions :: Options+                      _declsOoutputfile :: String+                      _bodyOnested :: Bool+                      _bodyOoptions :: Options+                      _bodyOoutputfile :: String+                      _declsIpps :: PP_Docs+                      _bodyIpp :: PP_Doc+                      -- "PrintCode.ag"(line 112, column 16)+                      _lhsOpp =+                          pp_parens (    "let" >#< (vlist _declsIpps)+                                    >-< "in " >#< _bodyIpp+                                    )+                      -- "PrintCode.ag"(line 299, column 7)+                      _declsOisDeclOfLet =+                          True+                      -- copy rule (down)+                      _declsOnested =+                          _lhsInested+                      -- copy rule (down)+                      _declsOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _declsOoutputfile =+                          _lhsIoutputfile+                      -- copy rule (down)+                      _bodyOnested =+                          _lhsInested+                      -- copy rule (down)+                      _bodyOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _bodyOoutputfile =+                          _lhsIoutputfile+                      ( _declsIpps) =+                          (decls_ _declsOisDeclOfLet _declsOnested _declsOoptions _declsOoutputfile )+                      ( _bodyIpp) =+                          (body_ _bodyOnested _bodyOoptions _bodyOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_LineExpr :: T_Expr ->+                     T_Expr+sem_Expr_LineExpr (T_Expr expr_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _exprOnested :: Bool+                      _exprOoptions :: Options+                      _exprOoutputfile :: String+                      _exprIpp :: PP_Doc+                      -- "PrintCode.ag"(line 146, column 16)+                      _lhsOpp =+                          _exprIpp >-< "{-# LINE" >#< ppWithLineNr (\n -> pp $ show $ n + 1) >#< show _lhsIoutputfile >#< "#-}"+                      -- copy rule (down)+                      _exprOnested =+                          _lhsInested+                      -- copy rule (down)+                      _exprOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _exprOoutputfile =+                          _lhsIoutputfile+                      ( _exprIpp) =+                          (expr_ _exprOnested _exprOoptions _exprOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_PragmaExpr :: Bool ->+                       Bool ->+                       String ->+                       T_Expr ->+                       T_Expr+sem_Expr_PragmaExpr onLeftSide_ onNewLine_ txt_ (T_Expr expr_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _exprOnested :: Bool+                      _exprOoptions :: Options+                      _exprOoutputfile :: String+                      _exprIpp :: PP_Doc+                      -- "PrintCode.ag"(line 135, column 16)+                      _lhsOpp =+                          let pragmaDoc = "{-#" >#< txt_ >#< "#-}"+                              op = if onNewLine_+                                   then (>-<)+                                   else (>#<)+                              leftOp x y = if onLeftSide_+                                           then x `op` y+                                           else y+                              rightOp x y = if onLeftSide_+                                            then x+                                            else x `op` y+                          in pragmaDoc `leftOp` _exprIpp `rightOp` pragmaDoc+                      -- copy rule (down)+                      _exprOnested =+                          _lhsInested+                      -- copy rule (down)+                      _exprOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _exprOoutputfile =+                          _lhsIoutputfile+                      ( _exprIpp) =+                          (expr_ _exprOnested _exprOoptions _exprOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_SimpleExpr :: String ->+                       T_Expr+sem_Expr_SimpleExpr txt_  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      -- "PrintCode.ag"(line 130, column 16)+                      _lhsOpp =+                          text txt_+                  in  ( _lhsOpp))) )+sem_Expr_TextExpr :: ([String]) ->+                     T_Expr+sem_Expr_TextExpr lns_  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      -- "PrintCode.ag"(line 131, column 16)+                      _lhsOpp =+                          vlist (map text lns_)+                  in  ( _lhsOpp))) )+sem_Expr_Trace :: String ->+                  T_Expr ->+                  T_Expr+sem_Expr_Trace txt_ (T_Expr expr_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _exprOnested :: Bool+                      _exprOoptions :: Options+                      _exprOoutputfile :: String+                      _exprIpp :: PP_Doc+                      -- "PrintCode.ag"(line 132, column 16)+                      _lhsOpp =+                          "trace" >#< (   pp_parens ("\"" >|< text txt_ >|< "\"")+                                      >-< pp_parens _exprIpp+                                      )+                      -- copy rule (down)+                      _exprOnested =+                          _lhsInested+                      -- copy rule (down)+                      _exprOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _exprOoutputfile =+                          _lhsIoutputfile+                      ( _exprIpp) =+                          (expr_ _exprOnested _exprOoptions _exprOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_TupleExpr :: T_Exprs ->+                      T_Expr+sem_Expr_TupleExpr (T_Exprs exprs_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _exprsOnested :: Bool+                      _exprsOoptions :: Options+                      _exprsOoutputfile :: String+                      _exprsIpps :: PP_Docs+                      -- "PrintCode.ag"(line 127, column 16)+                      _lhsOpp =+                          ppTuple _lhsInested _exprsIpps+                      -- copy rule (down)+                      _exprsOnested =+                          _lhsInested+                      -- copy rule (down)+                      _exprsOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _exprsOoutputfile =+                          _lhsIoutputfile+                      ( _exprsIpps) =+                          (exprs_ _exprsOnested _exprsOoptions _exprsOoutputfile )+                  in  ( _lhsOpp))) )+sem_Expr_UnboxedTupleExpr :: T_Exprs ->+                             T_Expr+sem_Expr_UnboxedTupleExpr (T_Exprs exprs_ )  =+    (T_Expr (\ _lhsInested+               _lhsIoptions+               _lhsIoutputfile ->+                 (let _lhsOpp :: PP_Doc+                      _exprsOnested :: Bool+                      _exprsOoptions :: Options+                      _exprsOoutputfile :: String+                      _exprsIpps :: PP_Docs+                      -- "PrintCode.ag"(line 128, column 23)+                      _lhsOpp =+                          ppUnboxedTuple _lhsInested _exprsIpps+                      -- copy rule (down)+                      _exprsOnested =+                          _lhsInested+                      -- copy rule (down)+                      _exprsOoptions =+                          _lhsIoptions+                      -- copy rule (down)+                      _exprsOoutputfile =+                          _lhsIoutputfile+                      ( _exprsIpps) =+                          (exprs_ _exprsOnested _exprsOoptions _exprsOoutputfile )+                  in  ( _lhsOpp))) )+-- Exprs -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         nested               : Bool+         options              : Options+         outputfile           : String+      synthesized attribute:+         pps                  : PP_Docs+   alternatives:+      alternative Cons:+         child hd             : Expr+         child tl             : Exprs+      alternative Nil:+-}+-- cata+sem_Exprs :: Exprs ->+             T_Exprs+sem_Exprs list  =+    (Prelude.foldr sem_Exprs_Cons sem_Exprs_Nil (Prelude.map sem_Expr list) )+-- semantic domain+newtype T_Exprs = T_Exprs (Bool ->+                           Options ->+                           String ->+                           ( PP_Docs))+data Inh_Exprs = Inh_Exprs {nested_Inh_Exprs :: Bool,options_Inh_Exprs :: Options,outputfile_Inh_Exprs :: String}+data Syn_Exprs = Syn_Exprs {pps_Syn_Exprs :: PP_Docs}+wrap_Exprs (T_Exprs sem ) (Inh_Exprs _lhsInested _lhsIoptions _lhsIoutputfile )  =+    (let ( _lhsOpps) =+             (sem _lhsInested _lhsIoptions _lhsIoutputfile )+     in  (Syn_Exprs _lhsOpps ))+sem_Exprs_Cons :: T_Expr ->+                  T_Exprs ->+                  T_Exprs+sem_Exprs_Cons (T_Expr hd_ ) (T_Exprs tl_ )  =+    (T_Exprs (\ _lhsInested+                _lhsIoptions+                _lhsIoutputfile ->+                  (let _lhsOpps :: PP_Docs+                       _hdOnested :: Bool+                       _hdOoptions :: Options+                       _hdOoutputfile :: String+                       _tlOnested :: Bool+                       _tlOoptions :: Options+                       _tlOoutputfile :: String+                       _hdIpp :: PP_Doc+                       _tlIpps :: PP_Docs+                       -- "PrintCode.ag"(line 55, column 10)+                       _lhsOpps =+                           _hdIpp : _tlIpps+                       -- copy rule (down)+                       _hdOnested =+                           _lhsInested+                       -- copy rule (down)+                       _hdOoptions =+                           _lhsIoptions+                       -- copy rule (down)+                       _hdOoutputfile =+                           _lhsIoutputfile+                       -- copy rule (down)+                       _tlOnested =+                           _lhsInested+                       -- copy rule (down)+                       _tlOoptions =+                           _lhsIoptions+                       -- copy rule (down)+                       _tlOoutputfile =+                           _lhsIoutputfile+                       ( _hdIpp) =+                           (hd_ _hdOnested _hdOoptions _hdOoutputfile )+                       ( _tlIpps) =+                           (tl_ _tlOnested _tlOoptions _tlOoutputfile )+                   in  ( _lhsOpps))) )+sem_Exprs_Nil :: T_Exprs+sem_Exprs_Nil  =+    (T_Exprs (\ _lhsInested+                _lhsIoptions+                _lhsIoutputfile ->+                  (let _lhsOpps :: PP_Docs+                       -- "PrintCode.ag"(line 56, column 10)+                       _lhsOpps =+                           []+                   in  ( _lhsOpps))) )+-- Lhs ---------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         isDeclOfLet          : Bool+         nested               : Bool+         options              : Options+         outputfile           : String+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Fun:+         child name           : {String}+         child args           : Exprs+         visit 0:+            local addStrictGuard : _+            local strictGuard : _+            local addBang     : _+      alternative Pattern3:+         child pat3           : Pattern+         visit 0:+            local addStrictGuard : _+            local strictGuard : _+      alternative Pattern3SM:+         child pat3           : Pattern+      alternative TupleLhs:+         child comps          : {[String]}+         visit 0:+            local addStrictGuard : _+            local strictGuard : _+            local addBang     : _+      alternative UnboxedTupleLhs:+         child comps          : {[String]}+         visit 0:+            local addStrictGuard : _+            local strictGuard : _+            local addBang     : _+-}+-- cata+sem_Lhs :: Lhs ->+           T_Lhs+sem_Lhs (Fun _name _args )  =+    (sem_Lhs_Fun _name (sem_Exprs _args ) )+sem_Lhs (Pattern3 _pat3 )  =+    (sem_Lhs_Pattern3 (sem_Pattern _pat3 ) )+sem_Lhs (Pattern3SM _pat3 )  =+    (sem_Lhs_Pattern3SM (sem_Pattern _pat3 ) )+sem_Lhs (TupleLhs _comps )  =+    (sem_Lhs_TupleLhs _comps )+sem_Lhs (UnboxedTupleLhs _comps )  =+    (sem_Lhs_UnboxedTupleLhs _comps )+-- semantic domain+newtype T_Lhs = T_Lhs (Bool ->+                       Bool ->+                       Options ->+                       String ->+                       ( PP_Doc))+data Inh_Lhs = Inh_Lhs {isDeclOfLet_Inh_Lhs :: Bool,nested_Inh_Lhs :: Bool,options_Inh_Lhs :: Options,outputfile_Inh_Lhs :: String}+data Syn_Lhs = Syn_Lhs {pp_Syn_Lhs :: PP_Doc}+wrap_Lhs (T_Lhs sem ) (Inh_Lhs _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile )  =+    (let ( _lhsOpp) =+             (sem _lhsIisDeclOfLet _lhsInested _lhsIoptions _lhsIoutputfile )+     in  (Syn_Lhs _lhsOpp ))+sem_Lhs_Fun :: String ->+               T_Exprs ->+               T_Lhs+sem_Lhs_Fun name_ (T_Exprs args_ )  =+    (T_Lhs (\ _lhsIisDeclOfLet+              _lhsInested+              _lhsIoptions+              _lhsIoutputfile ->+                (let _lhsOpp :: PP_Doc+                     _argsOnested :: Bool+                     _argsOoptions :: Options+                     _argsOoutputfile :: String+                     _argsIpps :: PP_Docs+                     -- "PrintCode.ag"(line 166, column 7)+                     _addStrictGuard =+                         if strictSems _lhsIoptions then \v -> v >#< "|" >#< _strictGuard     else id+                     -- "PrintCode.ag"(line 167, column 7)+                     _strictGuard =+                         _argsIpps `ppMultiSeqH` (pp "True")+                     -- "PrintCode.ag"(line 170, column 7)+                     _addBang =+                         if bangpats _lhsIoptions+                                  then \p -> "!" >|< p+                                  else id+                     -- "PrintCode.ag"(line 178, column 16)+                     _lhsOpp =+                         _addStrictGuard     (name_ >#< hv_sp (map _addBang     _argsIpps))+                     -- copy rule (down)+                     _argsOnested =+                         _lhsInested+                     -- copy rule (down)+                     _argsOoptions =+                         _lhsIoptions+                     -- copy rule (down)+                     _argsOoutputfile =+                         _lhsIoutputfile+                     ( _argsIpps) =+                         (args_ _argsOnested _argsOoptions _argsOoutputfile )+                 in  ( _lhsOpp))) )+sem_Lhs_Pattern3 :: T_Pattern ->+                    T_Lhs+sem_Lhs_Pattern3 (T_Pattern pat3_ )  =+    (T_Lhs (\ _lhsIisDeclOfLet+              _lhsInested+              _lhsIoptions+              _lhsIoutputfile ->+                (let _lhsOpp :: PP_Doc+                     _pat3OisDeclOfLet :: Bool+                     _pat3Ooptions :: Options+                     _pat3Icopy :: Pattern+                     _pat3IisUnderscore :: Bool+                     _pat3Ipp :: PP_Doc+                     _pat3Ipp' :: PP_Doc+                     _pat3IstrictVars :: ([PP_Doc])+                     -- "PrintCode.ag"(line 157, column 7)+                     _addStrictGuard =+                         if strictCases _lhsIoptions then \v -> v >#< "|" >#< _strictGuard     else id+                     -- "PrintCode.ag"(line 159, column 7)+                     _strictGuard =+                         _pat3IstrictVars `ppMultiSeqH` (pp "True")+                     -- "PrintCode.ag"(line 174, column 16)+                     _lhsOpp =+                         _addStrictGuard     _pat3Ipp+                     -- copy rule (down)+                     _pat3OisDeclOfLet =+                         _lhsIisDeclOfLet+                     -- copy rule (down)+                     _pat3Ooptions =+                         _lhsIoptions+                     ( _pat3Icopy,_pat3IisUnderscore,_pat3Ipp,_pat3Ipp',_pat3IstrictVars) =+                         (pat3_ _pat3OisDeclOfLet _pat3Ooptions )+                 in  ( _lhsOpp))) )+sem_Lhs_Pattern3SM :: T_Pattern ->+                      T_Lhs+sem_Lhs_Pattern3SM (T_Pattern pat3_ )  =+    (T_Lhs (\ _lhsIisDeclOfLet+              _lhsInested+              _lhsIoptions+              _lhsIoutputfile ->+                (let _lhsOpp :: PP_Doc+                     _pat3OisDeclOfLet :: Bool+                     _pat3Ooptions :: Options+                     _pat3Icopy :: Pattern+                     _pat3IisUnderscore :: Bool+                     _pat3Ipp :: PP_Doc+                     _pat3Ipp' :: PP_Doc+                     _pat3IstrictVars :: ([PP_Doc])+                     -- "PrintCode.ag"(line 175, column 16)+                     _lhsOpp =+                         _pat3Ipp'+                     -- copy rule (down)+                     _pat3OisDeclOfLet =+                         _lhsIisDeclOfLet+                     -- copy rule (down)+                     _pat3Ooptions =+                         _lhsIoptions+                     ( _pat3Icopy,_pat3IisUnderscore,_pat3Ipp,_pat3Ipp',_pat3IstrictVars) =+                         (pat3_ _pat3OisDeclOfLet _pat3Ooptions )+                 in  ( _lhsOpp))) )+sem_Lhs_TupleLhs :: ([String]) ->+                    T_Lhs+sem_Lhs_TupleLhs comps_  =+    (T_Lhs (\ _lhsIisDeclOfLet+              _lhsInested+              _lhsIoptions+              _lhsIoutputfile ->+                (let _lhsOpp :: PP_Doc+                     -- "PrintCode.ag"(line 157, column 7)+                     _addStrictGuard =+                         if strictCases _lhsIoptions then \v -> v >#< "|" >#< _strictGuard     else id+                     -- "PrintCode.ag"(line 161, column 7)+                     _strictGuard =+                         if stricterCases _lhsIoptions && not _lhsIisDeclOfLet+                         then map text comps_ `ppMultiSeqH` (pp "True")+                         else pp "True"+                     -- "PrintCode.ag"(line 170, column 7)+                     _addBang =+                         if bangpats _lhsIoptions+                                  then \p -> "!" >|< p+                                  else id+                     -- "PrintCode.ag"(line 176, column 16)+                     _lhsOpp =+                         _addStrictGuard     $ ppTuple _lhsInested (map (_addBang     . text) comps_)+                 in  ( _lhsOpp))) )+sem_Lhs_UnboxedTupleLhs :: ([String]) ->+                           T_Lhs+sem_Lhs_UnboxedTupleLhs comps_  =+    (T_Lhs (\ _lhsIisDeclOfLet+              _lhsInested+              _lhsIoptions+              _lhsIoutputfile ->+                (let _lhsOpp :: PP_Doc+                     -- "PrintCode.ag"(line 157, column 7)+                     _addStrictGuard =+                         if strictCases _lhsIoptions then \v -> v >#< "|" >#< _strictGuard     else id+                     -- "PrintCode.ag"(line 161, column 7)+                     _strictGuard =+                         if stricterCases _lhsIoptions && not _lhsIisDeclOfLet+                         then map text comps_ `ppMultiSeqH` (pp "True")+                         else pp "True"+                     -- "PrintCode.ag"(line 170, column 7)+                     _addBang =+                         if bangpats _lhsIoptions+                                  then \p -> "!" >|< p+                                  else id+                     -- "PrintCode.ag"(line 177, column 23)+                     _lhsOpp =+                         _addStrictGuard     $ ppUnboxedTuple _lhsInested (map (_addBang     . text) comps_)+                 in  ( _lhsOpp))) )+-- Pattern -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         isDeclOfLet          : Bool+         options              : Options+      synthesized attributes:+         copy                 : SELF+         isUnderscore         : Bool+         pp                   : PP_Doc+         pp'                  : PP_Doc+         strictVars           : [PP_Doc]+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local strictVar   : _+            local strictPatVars : _+            local addBang     : _+            local ppVar       : _+            local copy        : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local addBang     : _+            local copy        : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local addBang     : _+            local copy        : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts )  =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) (sem_Patterns _parts ) )+sem_Pattern (Constr _name _pats )  =+    (sem_Pattern_Constr _name (sem_Patterns _pats ) )+sem_Pattern (Product _pos _pats )  =+    (sem_Pattern_Product _pos (sem_Patterns _pats ) )+sem_Pattern (Underscore _pos )  =+    (sem_Pattern_Underscore _pos )+-- semantic domain+newtype T_Pattern = T_Pattern (Bool ->+                               Options ->+                               ( Pattern,Bool,PP_Doc,PP_Doc,([PP_Doc])))+data Inh_Pattern = Inh_Pattern {isDeclOfLet_Inh_Pattern :: Bool,options_Inh_Pattern :: Options}+data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: Pattern,isUnderscore_Syn_Pattern :: Bool,pp_Syn_Pattern :: PP_Doc,pp'_Syn_Pattern :: PP_Doc,strictVars_Syn_Pattern :: [PP_Doc]}+wrap_Pattern (T_Pattern sem ) (Inh_Pattern _lhsIisDeclOfLet _lhsIoptions )  =+    (let ( _lhsOcopy,_lhsOisUnderscore,_lhsOpp,_lhsOpp',_lhsOstrictVars) =+             (sem _lhsIisDeclOfLet _lhsIoptions )+     in  (Syn_Pattern _lhsOcopy _lhsOisUnderscore _lhsOpp _lhsOpp' _lhsOstrictVars ))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_ ) (T_Patterns parts_ )  =+    (T_Pattern (\ _lhsIisDeclOfLet+                  _lhsIoptions ->+                    (let _lhsOstrictVars :: ([PP_Doc])+                         _lhsOpp :: PP_Doc+                         _lhsOisUnderscore :: Bool+                         _lhsOpp' :: PP_Doc+                         _lhsOcopy :: Pattern+                         _patOisDeclOfLet :: Bool+                         _patOoptions :: Options+                         _partsOisDeclOfLet :: Bool+                         _partsOoptions :: Options+                         _patIcopy :: Pattern+                         _patIisUnderscore :: Bool+                         _patIpp :: PP_Doc+                         _patIpp' :: PP_Doc+                         _patIstrictVars :: ([PP_Doc])+                         _partsIcopy :: Patterns+                         _partsIpps :: ([PP_Doc])+                         _partsIpps' :: ([PP_Doc])+                         _partsIstrictVars :: ([PP_Doc])+                         -- "PrintCode.ag"(line 227, column 7)+                         _strictVar =+                             if strictCases _lhsIoptions && not _lhsIisDeclOfLet+                             then [_ppVar    ]+                             else []+                         -- "PrintCode.ag"(line 231, column 7)+                         _strictPatVars =+                             if stricterCases _lhsIoptions && not _lhsIisDeclOfLet+                             then _patIstrictVars+                             else []+                         -- "PrintCode.ag"(line 235, column 7)+                         _lhsOstrictVars =+                             _strictVar     ++ _strictPatVars+                         -- "PrintCode.ag"(line 249, column 7)+                         _addBang =+                             if bangpats _lhsIoptions && not _lhsIisDeclOfLet+                             then \p -> "!" >|< p+                             else id+                         -- "PrintCode.ag"(line 256, column 13)+                         _ppVar =+                             _addBang     $ pp (attrname False field_ attr_)+                         -- "PrintCode.ag"(line 257, column 13)+                         _lhsOpp =+                             if _patIisUnderscore+                              then _ppVar+                              else _ppVar     >|< "@" >|< _patIpp+                         -- "PrintCode.ag"(line 265, column 15)+                         _lhsOisUnderscore =+                             False+                         -- "PrintCode.ag"(line 279, column 13)+                         _lhsOpp' =+                             let attribute | field_ == _LOC || field_ == nullIdent = locname' attr_+                                           | otherwise                             = attrname False field_ attr_+                             in attribute >|< "@" >|< _patIpp'+                         -- self rule+                         _copy =+                             Alias field_ attr_ _patIcopy _partsIcopy+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- copy rule (down)+                         _patOisDeclOfLet =+                             _lhsIisDeclOfLet+                         -- copy rule (down)+                         _patOoptions =+                             _lhsIoptions+                         -- copy rule (down)+                         _partsOisDeclOfLet =+                             _lhsIisDeclOfLet+                         -- copy rule (down)+                         _partsOoptions =+                             _lhsIoptions+                         ( _patIcopy,_patIisUnderscore,_patIpp,_patIpp',_patIstrictVars) =+                             (pat_ _patOisDeclOfLet _patOoptions )+                         ( _partsIcopy,_partsIpps,_partsIpps',_partsIstrictVars) =+                             (parts_ _partsOisDeclOfLet _partsOoptions )+                     in  ( _lhsOcopy,_lhsOisUnderscore,_lhsOpp,_lhsOpp',_lhsOstrictVars))) )+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIisDeclOfLet+                  _lhsIoptions ->+                    (let _lhsOpp :: PP_Doc+                         _lhsOisUnderscore :: Bool+                         _lhsOpp' :: PP_Doc+                         _lhsOstrictVars :: ([PP_Doc])+                         _lhsOcopy :: Pattern+                         _patsOisDeclOfLet :: Bool+                         _patsOoptions :: Options+                         _patsIcopy :: Patterns+                         _patsIpps :: ([PP_Doc])+                         _patsIpps' :: ([PP_Doc])+                         _patsIstrictVars :: ([PP_Doc])+                         -- "PrintCode.ag"(line 249, column 7)+                         _addBang =+                             if bangpats _lhsIoptions && not _lhsIisDeclOfLet+                             then \p -> "!" >|< p+                             else id+                         -- "PrintCode.ag"(line 254, column 13)+                         _lhsOpp =+                             _addBang     $ pp_parens $ name_ >#< hv_sp _patsIpps+                         -- "PrintCode.ag"(line 263, column 15)+                         _lhsOisUnderscore =+                             False+                         -- "PrintCode.ag"(line 277, column 13)+                         _lhsOpp' =+                             pp_parens $ name_ >#< hv_sp (map pp_parens _patsIpps')+                         -- use rule "PrintCode.ag"(line 224, column 40)+                         _lhsOstrictVars =+                             _patsIstrictVars+                         -- self rule+                         _copy =+                             Constr name_ _patsIcopy+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- copy rule (down)+                         _patsOisDeclOfLet =+                             _lhsIisDeclOfLet+                         -- copy rule (down)+                         _patsOoptions =+                             _lhsIoptions+                         ( _patsIcopy,_patsIpps,_patsIpps',_patsIstrictVars) =+                             (pats_ _patsOisDeclOfLet _patsOoptions )+                     in  ( _lhsOcopy,_lhsOisUnderscore,_lhsOpp,_lhsOpp',_lhsOstrictVars))) )+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_ )  =+    (T_Pattern (\ _lhsIisDeclOfLet+                  _lhsIoptions ->+                    (let _lhsOpp :: PP_Doc+                         _lhsOisUnderscore :: Bool+                         _lhsOpp' :: PP_Doc+                         _lhsOstrictVars :: ([PP_Doc])+                         _lhsOcopy :: Pattern+                         _patsOisDeclOfLet :: Bool+                         _patsOoptions :: Options+                         _patsIcopy :: Patterns+                         _patsIpps :: ([PP_Doc])+                         _patsIpps' :: ([PP_Doc])+                         _patsIstrictVars :: ([PP_Doc])+                         -- "PrintCode.ag"(line 249, column 7)+                         _addBang =+                             if bangpats _lhsIoptions && not _lhsIisDeclOfLet+                             then \p -> "!" >|< p+                             else id+                         -- "PrintCode.ag"(line 255, column 13)+                         _lhsOpp =+                             _addBang     $ pp_block "(" ")" "," _patsIpps+                         -- "PrintCode.ag"(line 264, column 15)+                         _lhsOisUnderscore =+                             False+                         -- "PrintCode.ag"(line 278, column 13)+                         _lhsOpp' =+                             pp_block "(" ")" "," _patsIpps'+                         -- use rule "PrintCode.ag"(line 224, column 40)+                         _lhsOstrictVars =+                             _patsIstrictVars+                         -- self rule+                         _copy =+                             Product pos_ _patsIcopy+                         -- self rule+                         _lhsOcopy =+                             _copy+                         -- copy rule (down)+                         _patsOisDeclOfLet =+                             _lhsIisDeclOfLet+                         -- copy rule (down)+                         _patsOoptions =+                             _lhsIoptions+                         ( _patsIcopy,_patsIpps,_patsIpps',_patsIstrictVars) =+                             (pats_ _patsOisDeclOfLet _patsOoptions )+                     in  ( _lhsOcopy,_lhsOisUnderscore,_lhsOpp,_lhsOpp',_lhsOstrictVars))) )+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_  =+    (T_Pattern (\ _lhsIisDeclOfLet+                  _lhsIoptions ->+                    (let _lhsOpp :: PP_Doc+                         _lhsOisUnderscore :: Bool+                         _lhsOpp' :: PP_Doc+                         _lhsOstrictVars :: ([PP_Doc])+                         _lhsOcopy :: Pattern+                         -- "PrintCode.ag"(line 260, column 16)+                         _lhsOpp =+                             text "_"+                         -- "PrintCode.ag"(line 266, column 15)+                         _lhsOisUnderscore =+                             True+                         -- "PrintCode.ag"(line 282, column 16)+                         _lhsOpp' =+                             text "_"+                         -- use rule "PrintCode.ag"(line 224, column 40)+                         _lhsOstrictVars =+                             []+                         -- self rule+                         _copy =+                             Underscore pos_+                         -- self rule+                         _lhsOcopy =+                             _copy+                     in  ( _lhsOcopy,_lhsOisUnderscore,_lhsOpp,_lhsOpp',_lhsOstrictVars))) )+-- Patterns ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         isDeclOfLet          : Bool+         options              : Options+      synthesized attributes:+         copy                 : SELF+         pps                  : [PP_Doc]+         pps'                 : [PP_Doc]+         strictVars           : [PP_Doc]+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+      alternative Nil:+         visit 0:+            local copy        : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list  =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list) )+-- semantic domain+newtype T_Patterns = T_Patterns (Bool ->+                                 Options ->+                                 ( Patterns,([PP_Doc]),([PP_Doc]),([PP_Doc])))+data Inh_Patterns = Inh_Patterns {isDeclOfLet_Inh_Patterns :: Bool,options_Inh_Patterns :: Options}+data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: Patterns,pps_Syn_Patterns :: [PP_Doc],pps'_Syn_Patterns :: [PP_Doc],strictVars_Syn_Patterns :: [PP_Doc]}+wrap_Patterns (T_Patterns sem ) (Inh_Patterns _lhsIisDeclOfLet _lhsIoptions )  =+    (let ( _lhsOcopy,_lhsOpps,_lhsOpps',_lhsOstrictVars) =+             (sem _lhsIisDeclOfLet _lhsIoptions )+     in  (Syn_Patterns _lhsOcopy _lhsOpps _lhsOpps' _lhsOstrictVars ))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =+    (T_Patterns (\ _lhsIisDeclOfLet+                   _lhsIoptions ->+                     (let _lhsOpps :: ([PP_Doc])+                          _lhsOpps' :: ([PP_Doc])+                          _lhsOstrictVars :: ([PP_Doc])+                          _lhsOcopy :: Patterns+                          _hdOisDeclOfLet :: Bool+                          _hdOoptions :: Options+                          _tlOisDeclOfLet :: Bool+                          _tlOoptions :: Options+                          _hdIcopy :: Pattern+                          _hdIisUnderscore :: Bool+                          _hdIpp :: PP_Doc+                          _hdIpp' :: PP_Doc+                          _hdIstrictVars :: ([PP_Doc])+                          _tlIcopy :: Patterns+                          _tlIpps :: ([PP_Doc])+                          _tlIpps' :: ([PP_Doc])+                          _tlIstrictVars :: ([PP_Doc])+                          -- "PrintCode.ag"(line 244, column 10)+                          _lhsOpps =+                              _hdIpp : _tlIpps+                          -- "PrintCode.ag"(line 273, column 10)+                          _lhsOpps' =+                              _hdIpp' : _tlIpps'+                          -- use rule "PrintCode.ag"(line 224, column 40)+                          _lhsOstrictVars =+                              _hdIstrictVars ++ _tlIstrictVars+                          -- self rule+                          _copy =+                              (:) _hdIcopy _tlIcopy+                          -- self rule+                          _lhsOcopy =+                              _copy+                          -- copy rule (down)+                          _hdOisDeclOfLet =+                              _lhsIisDeclOfLet+                          -- copy rule (down)+                          _hdOoptions =+                              _lhsIoptions+                          -- copy rule (down)+                          _tlOisDeclOfLet =+                              _lhsIisDeclOfLet+                          -- copy rule (down)+                          _tlOoptions =+                              _lhsIoptions+                          ( _hdIcopy,_hdIisUnderscore,_hdIpp,_hdIpp',_hdIstrictVars) =+                              (hd_ _hdOisDeclOfLet _hdOoptions )+                          ( _tlIcopy,_tlIpps,_tlIpps',_tlIstrictVars) =+                              (tl_ _tlOisDeclOfLet _tlOoptions )+                      in  ( _lhsOcopy,_lhsOpps,_lhsOpps',_lhsOstrictVars))) )+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (\ _lhsIisDeclOfLet+                   _lhsIoptions ->+                     (let _lhsOpps :: ([PP_Doc])+                          _lhsOpps' :: ([PP_Doc])+                          _lhsOstrictVars :: ([PP_Doc])+                          _lhsOcopy :: Patterns+                          -- "PrintCode.ag"(line 245, column 10)+                          _lhsOpps =+                              []+                          -- "PrintCode.ag"(line 274, column 10)+                          _lhsOpps' =+                              []+                          -- use rule "PrintCode.ag"(line 224, column 40)+                          _lhsOstrictVars =+                              []+                          -- self rule+                          _copy =+                              []+                          -- self rule+                          _lhsOcopy =+                              _copy+                      in  ( _lhsOcopy,_lhsOpps,_lhsOpps',_lhsOstrictVars))) )+-- Program -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         importBlocks         : PP_Doc+         mainFile             : String+         mainName             : String+         moduleHeader         : String -> String -> String -> Bool -> String+         options              : Options+         optionsLine          : String+         pragmaBlocks         : String+         textBlocks           : PP_Doc+      synthesized attributes:+         genIO                : IO ()+         output               : PP_Docs+   alternatives:+      alternative Program:+         child chunks         : Chunks+         visit 0:+            local mainModuleFile : _+            local genMainModule : _+            local commonFile  : _+            local genCommonModule : _+-}+-- cata+sem_Program :: Program ->+               T_Program+sem_Program (Program _chunks )  =+    (sem_Program_Program (sem_Chunks _chunks ) )+-- semantic domain+newtype T_Program = T_Program (PP_Doc ->+                               String ->+                               String ->+                               (String -> String -> String -> Bool -> String) ->+                               Options ->+                               String ->+                               String ->+                               PP_Doc ->+                               ( (IO ()),PP_Docs))+data Inh_Program = Inh_Program {importBlocks_Inh_Program :: PP_Doc,mainFile_Inh_Program :: String,mainName_Inh_Program :: String,moduleHeader_Inh_Program :: String -> String -> String -> Bool -> String,options_Inh_Program :: Options,optionsLine_Inh_Program :: String,pragmaBlocks_Inh_Program :: String,textBlocks_Inh_Program :: PP_Doc}+data Syn_Program = Syn_Program {genIO_Syn_Program :: IO (),output_Syn_Program :: PP_Docs}+wrap_Program (T_Program sem ) (Inh_Program _lhsIimportBlocks _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks )  =+    (let ( _lhsOgenIO,_lhsOoutput) =+             (sem _lhsIimportBlocks _lhsImainFile _lhsImainName _lhsImoduleHeader _lhsIoptions _lhsIoptionsLine _lhsIpragmaBlocks _lhsItextBlocks )+     in  (Syn_Program _lhsOgenIO _lhsOoutput ))+sem_Program_Program :: T_Chunks ->+                       T_Program+sem_Program_Program (T_Chunks chunks_ )  =+    (T_Program (\ _lhsIimportBlocks+                  _lhsImainFile+                  _lhsImainName+                  _lhsImoduleHeader+                  _lhsIoptions+                  _lhsIoptionsLine+                  _lhsIpragmaBlocks+                  _lhsItextBlocks ->+                    (let _chunksOnested :: Bool+                         _lhsOoutput :: PP_Docs+                         _chunksOisDeclOfLet :: Bool+                         _lhsOgenIO :: (IO ())+                         _chunksOimportBlocks :: PP_Doc+                         _chunksOmainFile :: String+                         _chunksOmainName :: String+                         _chunksOmoduleHeader :: (String -> String -> String -> Bool -> String)+                         _chunksOoptions :: Options+                         _chunksOoptionsLine :: String+                         _chunksOpragmaBlocks :: String+                         _chunksOtextBlocks :: PP_Doc+                         _chunksIappendCommon :: ([[PP_Doc]])+                         _chunksIappendMain :: ([[PP_Doc]])+                         _chunksIgenSems :: (IO ())+                         _chunksIimports :: ([String])+                         _chunksIpps :: PP_Docs+                         -- "PrintCode.ag"(line 52, column 13)+                         _chunksOnested =+                             nest _lhsIoptions+                         -- "PrintCode.ag"(line 80, column 16)+                         _lhsOoutput =+                             _chunksIpps+                         -- "PrintCode.ag"(line 295, column 7)+                         _chunksOisDeclOfLet =+                             False+                         -- "PrintCode.ag"(line 324, column 7)+                         _mainModuleFile =+                             _lhsImainFile ++ ".hs"+                         -- "PrintCode.ag"(line 325, column 7)+                         _genMainModule =+                             writeModule _mainModuleFile+                               ( [ pp $ _lhsIpragmaBlocks+                                 , pp $ _lhsIoptionsLine+                                 , pp $ _lhsImoduleHeader _lhsImainName "" "" False+                                 , pp $ ("import " ++ _lhsImainName ++ "_common\n")+                                 ]+                                 ++ map pp _chunksIimports+                                 ++ map vlist _chunksIappendMain+                               )+                         -- "PrintCode.ag"(line 336, column 7)+                         _commonFile =+                             _lhsImainFile ++ "_common.hs"+                         -- "PrintCode.ag"(line 337, column 7)+                         _genCommonModule =+                             writeModule _commonFile+                                 ( [ pp $ _lhsIpragmaBlocks+                                   , pp $ _lhsIoptionsLine+                                   , pp $ _lhsImoduleHeader _lhsImainName "_common" "" True+                                   , _lhsIimportBlocks+                                   , _lhsItextBlocks+                                   ]+                                   ++ map vlist _chunksIappendCommon+                                 )+                         -- "PrintCode.ag"(line 348, column 7)+                         _lhsOgenIO =+                             do _genMainModule+                                _genCommonModule+                                _chunksIgenSems+                         -- copy rule (down)+                         _chunksOimportBlocks =+                             _lhsIimportBlocks+                         -- copy rule (down)+                         _chunksOmainFile =+                             _lhsImainFile+                         -- copy rule (down)+                         _chunksOmainName =+                             _lhsImainName+                         -- copy rule (down)+                         _chunksOmoduleHeader =+                             _lhsImoduleHeader+                         -- copy rule (down)+                         _chunksOoptions =+                             _lhsIoptions+                         -- copy rule (down)+                         _chunksOoptionsLine =+                             _lhsIoptionsLine+                         -- copy rule (down)+                         _chunksOpragmaBlocks =+                             _lhsIpragmaBlocks+                         -- copy rule (down)+                         _chunksOtextBlocks =+                             _lhsItextBlocks+                         ( _chunksIappendCommon,_chunksIappendMain,_chunksIgenSems,_chunksIimports,_chunksIpps) =+                             (chunks_ _chunksOimportBlocks _chunksOisDeclOfLet _chunksOmainFile _chunksOmainName _chunksOmoduleHeader _chunksOnested _chunksOoptions _chunksOoptionsLine _chunksOpragmaBlocks _chunksOtextBlocks )+                     in  ( _lhsOgenIO,_lhsOoutput))) )+-- Type --------------------------------------------------------+{-+   visit 0:+      inherited attribute:+         nested               : Bool+      synthesized attributes:+         pp                   : PP_Doc+         prec                 : Int+   alternatives:+      alternative Arr:+         child left           : Type+         child right          : Type+         visit 0:+            local l           : _+            local r           : _+      alternative List:+         child tp             : Type+      alternative SimpleType:+         child txt            : {String}+      alternative TupleType:+         child tps            : Types+      alternative UnboxedTupleType:+         child tps            : Types+-}+-- cata+sem_Type :: Type ->+            T_Type+sem_Type (Arr _left _right )  =+    (sem_Type_Arr (sem_Type _left ) (sem_Type _right ) )+sem_Type (List _tp )  =+    (sem_Type_List (sem_Type _tp ) )+sem_Type (SimpleType _txt )  =+    (sem_Type_SimpleType _txt )+sem_Type (TupleType _tps )  =+    (sem_Type_TupleType (sem_Types _tps ) )+sem_Type (UnboxedTupleType _tps )  =+    (sem_Type_UnboxedTupleType (sem_Types _tps ) )+-- semantic domain+newtype T_Type = T_Type (Bool ->+                         ( PP_Doc,Int))+data Inh_Type = Inh_Type {nested_Inh_Type :: Bool}+data Syn_Type = Syn_Type {pp_Syn_Type :: PP_Doc,prec_Syn_Type :: Int}+wrap_Type (T_Type sem ) (Inh_Type _lhsInested )  =+    (let ( _lhsOpp,_lhsOprec) =+             (sem _lhsInested )+     in  (Syn_Type _lhsOpp _lhsOprec ))+sem_Type_Arr :: T_Type ->+                T_Type ->+                T_Type+sem_Type_Arr (T_Type left_ ) (T_Type right_ )  =+    (T_Type (\ _lhsInested ->+                 (let _lhsOprec :: Int+                      _lhsOpp :: PP_Doc+                      _leftOnested :: Bool+                      _rightOnested :: Bool+                      _leftIpp :: PP_Doc+                      _leftIprec :: Int+                      _rightIpp :: PP_Doc+                      _rightIprec :: Int+                      -- "PrintCode.ag"(line 181, column 16)+                      _lhsOprec =+                          2+                      -- "PrintCode.ag"(line 181, column 16)+                      _lhsOpp =+                          _l     >#< "->" >-< _r+                      -- "PrintCode.ag"(line 183, column 16)+                      _l =+                          if _leftIprec  <= 2 then pp_parens _leftIpp  else _leftIpp+                      -- "PrintCode.ag"(line 183, column 16)+                      _r =+                          if _rightIprec <  2 then pp_parens _rightIpp else _rightIpp+                      -- copy rule (down)+                      _leftOnested =+                          _lhsInested+                      -- copy rule (down)+                      _rightOnested =+                          _lhsInested+                      ( _leftIpp,_leftIprec) =+                          (left_ _leftOnested )+                      ( _rightIpp,_rightIprec) =+                          (right_ _rightOnested )+                  in  ( _lhsOpp,_lhsOprec))) )+sem_Type_List :: T_Type ->+                 T_Type+sem_Type_List (T_Type tp_ )  =+    (T_Type (\ _lhsInested ->+                 (let _lhsOprec :: Int+                      _lhsOpp :: PP_Doc+                      _tpOnested :: Bool+                      _tpIpp :: PP_Doc+                      _tpIprec :: Int+                      -- "PrintCode.ag"(line 192, column 16)+                      _lhsOprec =+                          5+                      -- "PrintCode.ag"(line 192, column 16)+                      _lhsOpp =+                          "[" >|< _tpIpp >|< "]"+                      -- copy rule (down)+                      _tpOnested =+                          _lhsInested+                      ( _tpIpp,_tpIprec) =+                          (tp_ _tpOnested )+                  in  ( _lhsOpp,_lhsOprec))) )+sem_Type_SimpleType :: String ->+                       T_Type+sem_Type_SimpleType txt_  =+    (T_Type (\ _lhsInested ->+                 (let _lhsOprec :: Int+                      _lhsOpp :: PP_Doc+                      -- "PrintCode.ag"(line 195, column 16)+                      _lhsOprec =+                          5+                      -- "PrintCode.ag"(line 195, column 16)+                      _lhsOpp =+                          if reallySimple txt_ then text txt_ else pp_parens (text txt_)+                  in  ( _lhsOpp,_lhsOprec))) )+sem_Type_TupleType :: T_Types ->+                      T_Type+sem_Type_TupleType (T_Types tps_ )  =+    (T_Type (\ _lhsInested ->+                 (let _lhsOprec :: Int+                      _lhsOpp :: PP_Doc+                      _tpsOnested :: Bool+                      _tpsIpps :: PP_Docs+                      -- "PrintCode.ag"(line 186, column 16)+                      _lhsOprec =+                          5+                      -- "PrintCode.ag"(line 186, column 16)+                      _lhsOpp =+                          ppTuple _lhsInested _tpsIpps+                      -- copy rule (down)+                      _tpsOnested =+                          _lhsInested+                      ( _tpsIpps) =+                          (tps_ _tpsOnested )+                  in  ( _lhsOpp,_lhsOprec))) )+sem_Type_UnboxedTupleType :: T_Types ->+                             T_Type+sem_Type_UnboxedTupleType (T_Types tps_ )  =+    (T_Type (\ _lhsInested ->+                 (let _lhsOprec :: Int+                      _lhsOpp :: PP_Doc+                      _tpsOnested :: Bool+                      _tpsIpps :: PP_Docs+                      -- "PrintCode.ag"(line 189, column 23)+                      _lhsOprec =+                          5+                      -- "PrintCode.ag"(line 189, column 23)+                      _lhsOpp =+                          ppUnboxedTuple _lhsInested _tpsIpps+                      -- copy rule (down)+                      _tpsOnested =+                          _lhsInested+                      ( _tpsIpps) =+                          (tps_ _tpsOnested )+                  in  ( _lhsOpp,_lhsOprec))) )+-- Types -------------------------------------------------------+{-+   visit 0:+      inherited attribute:+         nested               : Bool+      synthesized attribute:+         pps                  : PP_Docs+   alternatives:+      alternative Cons:+         child hd             : Type+         child tl             : Types+      alternative Nil:+-}+-- cata+sem_Types :: Types ->+             T_Types+sem_Types list  =+    (Prelude.foldr sem_Types_Cons sem_Types_Nil (Prelude.map sem_Type list) )+-- semantic domain+newtype T_Types = T_Types (Bool ->+                           ( PP_Docs))+data Inh_Types = Inh_Types {nested_Inh_Types :: Bool}+data Syn_Types = Syn_Types {pps_Syn_Types :: PP_Docs}+wrap_Types (T_Types sem ) (Inh_Types _lhsInested )  =+    (let ( _lhsOpps) =+             (sem _lhsInested )+     in  (Syn_Types _lhsOpps ))+sem_Types_Cons :: T_Type ->+                  T_Types ->+                  T_Types+sem_Types_Cons (T_Type hd_ ) (T_Types tl_ )  =+    (T_Types (\ _lhsInested ->+                  (let _lhsOpps :: PP_Docs+                       _hdOnested :: Bool+                       _tlOnested :: Bool+                       _hdIpp :: PP_Doc+                       _hdIprec :: Int+                       _tlIpps :: PP_Docs+                       -- "PrintCode.ag"(line 67, column 10)+                       _lhsOpps =+                           _hdIpp : _tlIpps+                       -- copy rule (down)+                       _hdOnested =+                           _lhsInested+                       -- copy rule (down)+                       _tlOnested =+                           _lhsInested+                       ( _hdIpp,_hdIprec) =+                           (hd_ _hdOnested )+                       ( _tlIpps) =+                           (tl_ _tlOnested )+                   in  ( _lhsOpps))) )+sem_Types_Nil :: T_Types+sem_Types_Nil  =+    (T_Types (\ _lhsInested ->+                  (let _lhsOpps :: PP_Docs+                       -- "PrintCode.ag"(line 68, column 10)+                       _lhsOpps =+                           []+                   in  ( _lhsOpps))) )
+ src-derived/PrintErrorMessages.hs view
@@ -0,0 +1,1215 @@++-- UUAGC 0.9.5 (PrintErrorMessages.ag)+module PrintErrorMessages where++import Pretty+import UU.Scanner.Position(Pos(..), noPos)+import ErrorMessages+import DepTypes+import Options (Options,verbose)+import Data.List(mapAccumL,intersect,(\\))+import GrammarInfo++import UU.Scanner.Position(Pos)+import Pretty+import DepTypes(Trace)+import CodeSyntax+import CommonTypes++isError :: Error -> Bool+isError (ParserError     _ _ _    ) = True+isError (DupAlt          _ _ _    ) = False+isError (DupSynonym      _ _      ) = False+isError (DupSet          _ _      ) = False+isError (DupInhAttr      _ _ _    ) = True+isError (DupSynAttr      _ _ _    ) = True+isError (DupChild        _ _ _ _  ) = False+isError (DupRule         _ _ _ _ _) = True+isError (DupSig          _ _ _    ) = True+isError (UndefNont       _        ) = True+isError (UndefAlt        _ _      ) = True+isError (UndefChild      _ _ _    ) = True+isError (MissingRule     _ _ _ _  ) = False+isError (SuperfluousRule _ _ _ _  ) = False+isError (UndefLocal      _ _ _    ) = True+isError (ChildAsLocal    _ _ _    ) = False+isError (UndefAttr       _ _ _ _  ) = True+isError (CyclicSet       _        ) = True+isError (CustomError     w _ _    ) = not w+isError (LocalCirc       _ _ _ _ _) = False+isError (InstCirc        _ _ _ _ _) = False+isError (DirectCirc      _ _ _    ) = False+isError (InducedCirc     _ _ _    ) = False+isError (MissingTypeSig  _ _ _    ) = False+isError (MissingInstSig  _ _ _    ) = True+isError (ErroneousOrder  _ _ _    ) = True++toWidth n xs | k<n       = xs ++ replicate (n-k) ' '+             | otherwise = xs+               where k = length xs+	+showEdge ((inh,syn),_,_) +  = text ("inherited attribute " ++ toWidth 20 (getName inh) ++ " with synthesized attribute " ++  getName syn)++showEdgeLong ((inh,syn),path1,path2) +  = text ("inherited attribute " ++ getName inh ++ " is needed for " ++  "synthesized attribute " ++ getName syn)+    >-< indent 4 (vlist (map text path2))+    >-< text "and back: "+    >-< indent 4 (vlist (map text path1))+	+attrText inh syn+ = 	if   inh == syn +    then "threaded attribute " ++ getName inh+    else "inherited attribute " ++ getName inh ++ " and synthesized attribute " ++getName syn	++        +ppTrace :: Trace -> PP_Doc+ppTrace (tr:rest) = wfill [showLineNr (lineNr tr) ++ ":", "SEM", getName (nt tr), "|", getName (prod tr)+                         , lhsFld tr +.+ lhsAttr tr, "=", "..." +#+ showRhs tr +#+ "..."]+                    >-< ppTrace rest+ppTrace [] = empty++showRhs :: TraceElem -> String+showRhs tr = if null (getName field)+             then "@" ++ getName attr+             else "@" ++ (field +.+ attr)+ where field = rhsFld tr+       attr  = rhsAttr tr+ +showLineNr :: Int -> String+showLineNr i | i==(-1) = "CR"+             | otherwise = show i++showAttrDef f a | f == _LHS  = "synthesized attribute " ++ getName a+                | f == _LOC  = "local attribute " ++ getName a+                | f == _INST = "inst attribute " ++ getName a+                | otherwise  = "inherited attribute " ++ getName a ++ " of field " ++ getName f++showAttrUse f a | f == _LHS  = "inherited attribute " ++ getName a+                | f == _LOC  = "local attribute " ++ getName a +                | f == _INST = "inst attribute " ++ getName a+                | otherwise  = "synthesized attribute " ++ getName a ++ " of field " ++ getName f++ppAttr f a = text (getName f++"."++getName a)+ppAttrUse f a = "@" >|< ppAttr f a++infixr 5 +#++(+#+) :: String -> String -> String+(+#+) s t = s ++ " " ++ t++infixr 5 +.++(+.+) :: Identifier -> Identifier -> String+(+.+) s t = getName s ++ "." ++ getName t++wfill = fill . addSpaces. concat . map words+  where addSpaces (x:xs) = x:map addSpace xs+        addSpaces []     = []+        addSpace  [x]    | x `elem` ".,;:!?" = [x]+        addSpace  xs     = ' ':xs++ppError :: Bool           -- class of the error, True:error False:warning+        -> Pos      -- source position+        -> PP_Doc         -- error message+        -> PP_Doc         -- pattern+        -> PP_Doc         -- help, more info+        -> PP_Doc         -- action taken by AG+        -> Bool           -- verbose? show help and action?+        -> PP_Doc+ppError isError pos mesg pat hlp act verbose+  = let position = case pos of+                     Pos l c f | l >= 0    -> f >|< ":" >|< show l >|< ":" >|< show c+                               | otherwise -> pp "uuagc"+        tp      = if isError then "error" else "warning"+        header  = position >|< ":" >#< tp >|< ":" >#< mesg+        pattern = "pattern  :" >#< pat+        help    = "help     :" >#< hlp+        action  = "action   :" >#< act+    in if verbose+         then vlist [text "",header,pattern,help,action]+         else header++{-+-- old error reporting code+  = let +      cl = if isError then "ERROR" else "Warning"+      position   = case pos of+                         (Pos l c f) | l >= 0    -> f >|< ": line " >|< show l >|< ", column " >|< show c+                                     | otherwise -> empty+      header     = "*** UU.AG" >#< cl >#< position >#< "***"+      message    = "problem  :" >#< mesg+      pattern    = "pattern  :" >#< pat+      help       = "help     :" >#< hlp+      action     = "action   :" >#< act+    in+      if verbose+         then vlist [text "",header,message,pattern,help,action]+         else vlist [text "",header,message]+-}++showPos = show . getPos++ppInterface inter = wfill ["interface:", show inter]++-- Error -------------------------------------------------------+{-+   visit 0:+      inherited attribute:+         verbose              : Bool+      synthesized attributes:+         me                   : SELF+         pp                   : PP_Doc+   alternatives:+      alternative ChildAsLocal:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child var            : {Name}+         visit 0:+            local me          : _+      alternative CustomError:+         child isWarning      : {Bool}+         child pos            : {Pos}+         child mesg           : {PP_Doc}+         visit 0:+            local me          : _+      alternative CyclicSet:+         child name           : {Name}+         visit 0:+            local me          : _+      alternative DirectCirc:+         child nt             : {Nonterminal}+         child o_visit        : {Bool}+         child cyclic         : {[((Name,Name),[String],[String])]}+         visit 0:+            local me          : _+      alternative DupAlt:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child occ1           : {Constructor}+         visit 0:+            local me          : _+      alternative DupChild:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child name           : {Name}+         child occ1           : {Name}+         visit 0:+            local me          : _+      alternative DupInhAttr:+         child nt             : {Nonterminal}+         child attr           : {Name}+         child occ1           : {Name}+         visit 0:+            local me          : _+      alternative DupRule:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+         child occ1           : {Name}+         visit 0:+            local me          : _+      alternative DupSet:+         child name           : {Nonterminal}+         child occ1           : {Nonterminal}+         visit 0:+            local me          : _+      alternative DupSig:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+         visit 0:+            local me          : _+      alternative DupSynAttr:+         child nt             : {Nonterminal}+         child attr           : {Name}+         child occ1           : {Name}+         visit 0:+            local me          : _+      alternative DupSynonym:+         child nt             : {Nonterminal}+         child occ1           : {Nonterminal}+         visit 0:+            local me          : _+      alternative ErroneousOrder:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child order          : {Dependency}+         visit 0:+            local me          : _+      alternative InducedCirc:+         child nt             : {Nonterminal}+         child cinter         : {CInterface}+         child cyclic         : {[((Name,Name),[String],[String])]}+         visit 0:+            local me          : _+      alternative InstCirc:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+         child o_visit        : {Bool}+         child path           : {[String]}+         visit 0:+            local me          : _+      alternative LocalCirc:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+         child o_visit        : {Bool}+         child path           : {[String]}+         visit 0:+            local me          : _+      alternative MissingInstSig:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+         visit 0:+            local me          : _+      alternative MissingRule:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+         visit 0:+            local me          : _+      alternative MissingTypeSig:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child attr           : {Name}+         visit 0:+            local me          : _+      alternative ParserError:+         child pos            : {Pos}+         child problem        : {String}+         child action         : {String}+         visit 0:+            local me          : _+      alternative SuperfluousRule:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+         visit 0:+            local me          : _+      alternative UndefAlt:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         visit 0:+            local me          : _+      alternative UndefAttr:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child field          : {Name}+         child attr           : {Name}+         visit 0:+            local me          : _+      alternative UndefChild:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child name           : {Name}+         visit 0:+            local me          : _+      alternative UndefLocal:+         child nt             : {Nonterminal}+         child con            : {Constructor}+         child var            : {Name}+         visit 0:+            local me          : _+      alternative UndefNont:+         child nt             : {Nonterminal}+         visit 0:+            local me          : _+-}+-- cata+sem_Error :: Error ->+             T_Error+sem_Error (ChildAsLocal _nt _con _var )  =+    (sem_Error_ChildAsLocal _nt _con _var )+sem_Error (CustomError _isWarning _pos _mesg )  =+    (sem_Error_CustomError _isWarning _pos _mesg )+sem_Error (CyclicSet _name )  =+    (sem_Error_CyclicSet _name )+sem_Error (DirectCirc _nt _o_visit _cyclic )  =+    (sem_Error_DirectCirc _nt _o_visit _cyclic )+sem_Error (DupAlt _nt _con _occ1 )  =+    (sem_Error_DupAlt _nt _con _occ1 )+sem_Error (DupChild _nt _con _name _occ1 )  =+    (sem_Error_DupChild _nt _con _name _occ1 )+sem_Error (DupInhAttr _nt _attr _occ1 )  =+    (sem_Error_DupInhAttr _nt _attr _occ1 )+sem_Error (DupRule _nt _con _field _attr _occ1 )  =+    (sem_Error_DupRule _nt _con _field _attr _occ1 )+sem_Error (DupSet _name _occ1 )  =+    (sem_Error_DupSet _name _occ1 )+sem_Error (DupSig _nt _con _attr )  =+    (sem_Error_DupSig _nt _con _attr )+sem_Error (DupSynAttr _nt _attr _occ1 )  =+    (sem_Error_DupSynAttr _nt _attr _occ1 )+sem_Error (DupSynonym _nt _occ1 )  =+    (sem_Error_DupSynonym _nt _occ1 )+sem_Error (ErroneousOrder _nt _con _order )  =+    (sem_Error_ErroneousOrder _nt _con _order )+sem_Error (InducedCirc _nt _cinter _cyclic )  =+    (sem_Error_InducedCirc _nt _cinter _cyclic )+sem_Error (InstCirc _nt _con _attr _o_visit _path )  =+    (sem_Error_InstCirc _nt _con _attr _o_visit _path )+sem_Error (LocalCirc _nt _con _attr _o_visit _path )  =+    (sem_Error_LocalCirc _nt _con _attr _o_visit _path )+sem_Error (MissingInstSig _nt _con _attr )  =+    (sem_Error_MissingInstSig _nt _con _attr )+sem_Error (MissingRule _nt _con _field _attr )  =+    (sem_Error_MissingRule _nt _con _field _attr )+sem_Error (MissingTypeSig _nt _con _attr )  =+    (sem_Error_MissingTypeSig _nt _con _attr )+sem_Error (ParserError _pos _problem _action )  =+    (sem_Error_ParserError _pos _problem _action )+sem_Error (SuperfluousRule _nt _con _field _attr )  =+    (sem_Error_SuperfluousRule _nt _con _field _attr )+sem_Error (UndefAlt _nt _con )  =+    (sem_Error_UndefAlt _nt _con )+sem_Error (UndefAttr _nt _con _field _attr )  =+    (sem_Error_UndefAttr _nt _con _field _attr )+sem_Error (UndefChild _nt _con _name )  =+    (sem_Error_UndefChild _nt _con _name )+sem_Error (UndefLocal _nt _con _var )  =+    (sem_Error_UndefLocal _nt _con _var )+sem_Error (UndefNont _nt )  =+    (sem_Error_UndefNont _nt )+-- semantic domain+newtype T_Error = T_Error (Bool ->+                           ( Error,PP_Doc))+data Inh_Error = Inh_Error {verbose_Inh_Error :: Bool}+data Syn_Error = Syn_Error {me_Syn_Error :: Error,pp_Syn_Error :: PP_Doc}+wrap_Error (T_Error sem ) (Inh_Error _lhsIverbose )  =+    (let ( _lhsOme,_lhsOpp) =+             (sem _lhsIverbose )+     in  (Syn_Error _lhsOme _lhsOpp ))+sem_Error_ChildAsLocal :: Nonterminal ->+                          Constructor ->+                          Name ->+                          T_Error+sem_Error_ChildAsLocal nt_ con_ var_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 297, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Nontrivial field ",getName var_, "is used as local at constructor"+                                             , getName con_ , "of nonterminal",getName nt_, "."+                                             ]+                               pat   = "SEM" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< "... = "+                                                       >#< "..." >#< "@" >|< getName var_ >#< "..." )+                               help =  wfill ["A rule in the definitions for alternative" , getName con_ ,"of nonterminal"+                                             , getName nt_ , "contains a nontrivial field name", getName var_, "."+                                             ,"You should use @", getName var_, ".self instead, where self is a SELF-attribute."+                                             ]+                               act  = wfill ["The generated program probably contains a type error or has undefined variables."]+                           in ppError (isError _me) (getPos var_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           ChildAsLocal nt_ con_ var_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_CustomError :: Bool ->+                         Pos ->+                         PP_Doc ->+                         T_Error+sem_Error_CustomError isWarning_ pos_ mesg_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 335, column 21)+                       _lhsOpp =+                           let pat   =  text "unknown"+                               help = wfill ["not available."]+                               act  = wfill ["unknown"]+                           in ppError (isError _me) pos_ mesg_ pat help act False+                       -- self rule+                       _me =+                           CustomError isWarning_ pos_ mesg_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_CyclicSet :: Name ->+                       T_Error+sem_Error_CyclicSet name_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 326, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Cyclic definition for nonterminal set", getName name_]+                               pat   = "SET" >#< getName name_ >#< "=" >#< "..." >#< getName name_ >#< "..."+                               help =  wfill ["The defintion for a nonterminal set named" , getName name_+                                             ,"directly or indirectly refers to itself."+                                             ,"Adapt the definition of the nonterminal set, to remove the cyclic dependency."+                                             ]+                               act  = wfill ["The nonterminal set", getName name_, "is considered to be empty."]+                           in ppError (isError _me) (getPos name_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           CyclicSet name_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DirectCirc :: Nonterminal ->+                        Bool ->+                        ([((Name,Name),[String],[String])]) ->+                        T_Error+sem_Error_DirectCirc nt_ o_visit_ cyclic_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 364, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["In nonterminal", getName nt_, "synthesized and inherited attributes are mutually dependent" ]+                                       >-< vlist (map showEdge cyclic_)+                               pat   = text ""+                               help  = vlist (map showEdgeLong cyclic_)+                               act   | o_visit_ = text "An unoptimized version was generated. It might hang when run."+                                     | otherwise = text "The generated program might hang when run."+                           in ppError (isError _me) noPos mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DirectCirc nt_ o_visit_ cyclic_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupAlt :: Nonterminal ->+                    Constructor ->+                    Constructor ->+                    T_Error+sem_Error_DupAlt nt_ con_ occ1_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 70, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Repeated definition for alternative", getName con_+                                             ,"of nonterminal", getName nt_, "."+                                             ] >-<+                                       wfill ["First definition:", (showPos occ1_),"."] >-<+                                       wfill ["Other definition:", (showPos con_),"."]+                               pat =     "DATA" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< "...")+                                     >-< indent 2 ("|" >#< getName con_ >#< "...")+                               help =  wfill ["The nonterminal",getName nt_,"has more than one alternative that"+                                             ,"is labelled with the constructor name",getName con_,"."+                                             ,"You should either rename or remove enough of them to make all"+                                             ,"constructors of",getName nt_,"uniquely named."+                                             ]+                               act  = wfill [ "The first alternative of name",getName con_+                                            ,"you have given for nonterminal",getName nt_+                                            ,"is considered valid. All other alternatives have been discarded."+                                            ]+                           in ppError (isError _me) (getPos con_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupAlt nt_ con_ occ1_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupChild :: Nonterminal ->+                      Constructor ->+                      Name ->+                      Name ->+                      T_Error+sem_Error_DupChild nt_ con_ name_ occ1_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 163, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Repeated declaration for field", getName name_, "of alternative"+                                             ,getName con_, "of nonterminal", getName nt_, "."+                                             ] >-<+                                       wfill ["First definition:", (showPos occ1_),"."] >-<+                                       wfill ["Other definition:", (showPos name_),"."]+                               pat   =   "DATA" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< (getName name_ >|< ":..." >-< getName name_ >|< ":..."))+                               help =  wfill ["The alternative" ,getName con_ , "of nonterminal" ,getName nt_+                                             ,"has more than one field that is named"+                                             , getName name_ ++ ". Possibly they have different types."+                                             ,"You should either rename or remove enough of them to make all fields of"+                                             ,getName con_ , "for nonterminal " , getName nt_ , "uniquely named."+                                             ]+                               act  = wfill ["The last declaration with its corresponding type is considered valid."+                                            ,"All others have been discarded."+                                            ]+                           in ppError (isError _me) (getPos name_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupChild nt_ con_ name_ occ1_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupInhAttr :: Nonterminal ->+                        Name ->+                        Name ->+                        T_Error+sem_Error_DupInhAttr nt_ attr_ occ1_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 125, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Repeated declaration of inherited attribute", getName attr_+                                             , "of nonterminal", getName nt_, "."+                                             ] >-<+                                       wfill ["First definition:", (showPos occ1_),"."] >-<+                                       wfill ["Other definition:", (showPos attr_),"."]+                               pat  = "ATTR" >#< getName nt_ >#< "[" >#< getName attr_ >|< ":...,"+                                                             >#< getName attr_ >|< ":... | | ]"+                               help =  wfill ["The identifier" , getName attr_ ,"has been declared"+                                             ,"as an inherited (or chained) attribute for nonterminal"+                                             ,getName nt_ , "more than once, with possibly different types."+                                             ,"Delete all but one or rename them to make them unique."+                                             ]+                               act  = wfill ["One declaration with its corresponding type is considered valid."+                                            ,"All others have been discarded. The generated program will probably not run."+                                            ]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupInhAttr nt_ attr_ occ1_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupRule :: Nonterminal ->+                     Constructor ->+                     Name ->+                     Name ->+                     Name ->+                     T_Error+sem_Error_DupRule nt_ con_ field_ attr_ occ1_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 183, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["At constructor",getName con_, "of nonterminal", getName nt_, "there are two or more rules for"+                                             ,showAttrDef field_ attr_,"."+                                             ]  >-<+                                       wfill ["First rule:", (showPos occ1_),"."] >-<+                                       wfill ["Other rule:", (showPos attr_),"."]+                               pat   =   "SEM" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr field_ attr_ >#< "= ...")+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr field_ attr_ >#< "= ...")+                               help =  wfill ["In the rules for alternative" , getName con_ , "of nonterminal" , getName nt_+                                                     ,", there is more than one rule for the" , showAttrDef field_ attr_+                                                     ,". You should either rename or remove enough of them to make all rules for alternative"+                                                     ,getName con_ , "of nonterminal " ,getName  nt_ , "uniquely named."+                                                     ]+                               act  = wfill ["The last rule given is considered valid. All others have been discarded."]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupRule nt_ con_ field_ attr_ occ1_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupSet :: Nonterminal ->+                    Nonterminal ->+                    T_Error+sem_Error_DupSet name_ occ1_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 109, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Definition of nonterminal set", getName name_, "clashes with another"+                                             ,"set, a type synonym or a data definition."+                                             ] >-<+                                       wfill ["First definition:", (showPos occ1_),"."] >-<+                                       wfill ["Set definition:"   , (showPos name_),"."]+                               pat =     "SET" >#< getName name_ >#< "=" >#<  "..."+                                     >-< "SET" >#< getName name_ >#< "=" >#<  "..."+                               help =  wfill ["A nonterminal set with name", getName  name_+                                             ,"has been given while there already is a SET, DATA, or TYPE"+                                             ,"definition with the same name."+                                             ,"You should either rename or remove the nonterminal set."+                                             ]+                               act  = wfill [ "The clashing nonterminal set will be ignored."+                                            ]+                           in ppError (isError _me)  (getPos name_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupSet name_ occ1_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupSig :: Nonterminal ->+                    Constructor ->+                    Name ->+                    T_Error+sem_Error_DupSig nt_ con_ attr_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 201, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["At constructor",getName con_, "of nonterminal", getName nt_, "there are two or more typesignatures for"+                                             ,showAttrDef _LOC attr_,"."+                                             ]  >-<+                                       wfill ["First signature:", (showPos attr_),"."]+                               pat   =   "SEM" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr _LOC attr_ >#< "= ...")+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr _LOC attr_ >#< "= ...")+                               help =  wfill ["In the rules for alternative" , getName con_ , "of nonterminal" , getName nt_+                                                     ,", there is more than one rule for the" , showAttrDef _LOC attr_+                                                     ,". You should remove enough of them to make all typesignatures for alternative"+                                                     ,getName con_ , "of nonterminal " ,getName  nt_ , "unique."+                                                     ]+                               act  = wfill ["The last typesignature given is considered valid. All others have been discarded."]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupSig nt_ con_ attr_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupSynAttr :: Nonterminal ->+                        Name ->+                        Name ->+                        T_Error+sem_Error_DupSynAttr nt_ attr_ occ1_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 144, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Repeated declaration of synthesized attribute", getName attr_+                                             , "of nonterminal", getName nt_, "."+                                             ] >-<+                                       wfill ["First definition:", (showPos occ1_),"."] >-<+                                       wfill ["Other definition:", (showPos attr_),"."]+                               pat  = "ATTR" >#< getName nt_ >#< "[ | |" >#< getName attr_ >|< ":...,"+                                                                 >#< getName attr_ >|< ":... ]"+                               help =  wfill ["The identifier" , getName attr_ ,"has been declared"+                                             ,"as a synthesized (or chained) attribute for nonterminal"+                                             ,getName nt_ , "more than once, with possibly different types."+                                             ,"Delete all but one or rename them to make them unique."+                                             ]+                               act  = wfill ["One declaration with its corresponding type is considered valid."+                                            ,"All others have been discarded. The generated program will probably not run."+                                            ]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupSynAttr nt_ attr_ occ1_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_DupSynonym :: Nonterminal ->+                        Nonterminal ->+                        T_Error+sem_Error_DupSynonym nt_ occ1_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 92, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Definition of type synonym", getName nt_, "clashes with another"+                                             ,"type synonym."+                                             ] >-<+                                       wfill ["First definition:", (showPos occ1_),"."] >-<+                                       wfill ["Type synonym :"   , (showPos nt_),"."]+                               pat =     "DATA" >#< getName nt_+                                     >-< indent 2 ("|" >#< "...")+                                     >-< "TYPE" >#< getName nt_ >#< "=" >#<  "..."+                               help =  wfill ["A type synonym with name", getName  nt_+                                             ,"has been given while there already is TYPE"+                                             ,"definition with the same name."+                                             ,"You should either rename or remove the type synonym."+                                             ]+                               act  = wfill [ "The clashing type synonym will be ignored."+                                            ]+                           in ppError (isError _me)  (getPos nt_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           DupSynonym nt_ occ1_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_ErroneousOrder :: Nonterminal ->+                            Constructor ->+                            Dependency ->+                            T_Error+sem_Error_ErroneousOrder nt_ con_ order_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 409, column 21)+                       _lhsOpp =+                           let (Dependency (fldA,nmA) (fldB,nmB)) = order_+                               mesg  = wfill ["At alternative",getName con_, "of nonterminal", getName nt_, "there is an erroneous order"+                                             , showAttrDef fldA nmA+                                             , "<"+                                             , showAttrDef fldB nmB+                                             ]+                               pat   = "SEM" >#< getName nt_+                                         >-< indent 2 ("|" >#< getName con_ >#< ppAttr fldA nmA >#< "<" >#< ppAttr fldB nmB)+                               help =  wfill [ "In the rules for alternative" , getName con_ , "of nonterminal" , getName nt_+                                             , ", there is an erroneous attribute order defined"+                                             , showAttrDef fldA nmA, "<", showAttrDef fldB nmB+                                             , "because"+                                             , showAttrDef fldA nmA+                                             , "is not an In-attribute (inherited attribute of the production, or a synthesized attribute of a child)"+                                             ]+                               act  = wfill ["Please change the order definition."]+                           in ppError (isError _me) (getPos fldA) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           ErroneousOrder nt_ con_ order_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_InducedCirc :: Nonterminal ->+                         CInterface ->+                         ([((Name,Name),[String],[String])]) ->+                         T_Error+sem_Error_InducedCirc nt_ cinter_ cyclic_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 372, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["After scheduling, in nonterminal", getName nt_, "synthesized and inherited attributes have an INDUCED mutual dependency" ]+                                       >-< vlist (map showEdge cyclic_)+                               pat   = text ""+                               showInter (CInterface segs) = concat (snd (mapAccumL (\i c -> (i+1,("visit " ++ show i) : map ind (showsSegment c))) 0 segs))+                               help  = vlist (("Interface for nonterminal " ++ getName nt_ ++ ":") : map ind (showInter cinter_))+                                       >-< vlist (map showEdgeLong cyclic_)+                               act   = text "An unoptimized version was generated. It might hang when run."+                           in ppError (isError _me) noPos mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           InducedCirc nt_ cinter_ cyclic_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_InstCirc :: Nonterminal ->+                      Constructor ->+                      Name ->+                      Bool ->+                      ([String]) ->+                      T_Error+sem_Error_InstCirc nt_ con_ attr_ o_visit_ path_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 352, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Circular dependency for inst attribute", getName attr_+                                             , "of alternative", getName con_, "of nonterminal", getName nt_]+                               pat   = "SEM" >#< getName nt_+                                       >-< indent 2 ("|" >#< getName con_ >#< "inst." >|< getName attr_ >#< "="+                                                         >#< "..." >#< "@s.<some attribte>" >#< "...")+                               help  = if null path_+                                       then text "the definition is directly circular"+                                       else hlist ("The following attributes are involved in the cycle:": path_)+                               act   | o_visit_ = text "An unoptimized version was generated. It might hang when run."+                                     | otherwise = text "The generated program might hang when run."+                           in ppError (isError _me) (getPos (attr_)) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           InstCirc nt_ con_ attr_ o_visit_ path_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_LocalCirc :: Nonterminal ->+                       Constructor ->+                       Name ->+                       Bool ->+                       ([String]) ->+                       T_Error+sem_Error_LocalCirc nt_ con_ attr_ o_visit_ path_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 340, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Circular dependency for local attribute", getName attr_+                                             , "of alternative", getName con_, "of nonterminal", getName nt_]+                               pat   = "SEM" >#< getName nt_+                                       >-< indent 2 ("|" >#< getName con_ >#< "loc." >|< getName attr_ >#< "="+                                                         >#< "..." >#< "@loc." >|< getName attr_ >#< "...")+                               help  = if null path_+                                       then text "the definition is directly circular"+                                       else hlist ("The following attributes are involved in the cycle:": path_)+                               act   | o_visit_ = text "An unoptimized version was generated. It might hang when run."+                                     | otherwise = text "The generated program might hang when run."+                           in ppError (isError _me) (getPos (attr_)) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           LocalCirc nt_ con_ attr_ o_visit_ path_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_MissingInstSig :: Nonterminal ->+                            Constructor ->+                            Name ->+                            T_Error+sem_Error_MissingInstSig nt_ con_ attr_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 395, column 21)+                       _lhsOpp =+                           let mesg = wfill ["Type signature needed, but not found for", showAttrDef _INST attr_ , "in alternative"+                                             , getName con_ , "of nonterminal",getName nt_ ,"."+                                             ]>-<+                                       wfill ["Location:", (showPos attr_),"."]+                               pat   = "SEM" >#< nt_+                                         >-< indent 2 ("|" >#< getName con_ >#< ppAttr _INST attr_ >#< ": ...")+                               help  = wfill ["The", showAttrDef _INST attr_, "in alternative", getName con_+                                             ,"of nonterminal", getName nt_, "is a non-terminal attribute, so "+                                             ,"its type is needed to attribute its value."+                                             ,"Please supply its type."+                                             ]+                               act  = wfill ["It is not possible to proceed without this signature."]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           MissingInstSig nt_ con_ attr_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_MissingRule :: Nonterminal ->+                         Constructor ->+                         Name ->+                         Name ->+                         T_Error+sem_Error_MissingRule nt_ con_ field_ attr_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 255, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Missing rule for", showAttrDef field_ attr_ , "in alternative"+                                             , getName con_ , "of nonterminal",getName nt_ ,"."+                                             ]+                               pat   =   "SEM" >#< nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr field_ attr_ >#< "= ...")+                               help  = wfill ["The", showAttrDef field_ attr_, "in alternative", getName con_+                                             , "of nonterminal", getName nt_, "is missing and cannot be inferred"+                                             ,"by a copy rule, so you should add an appropriate rule."+                                             ]+                               act  = wfill ["The value of the attribute has been set to undefined."]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           MissingRule nt_ con_ field_ attr_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_MissingTypeSig :: Nonterminal ->+                            Constructor ->+                            Name ->+                            T_Error+sem_Error_MissingTypeSig nt_ con_ attr_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 381, column 21)+                       _lhsOpp =+                           let mesg = wfill ["Type signature needed, but not found for", showAttrDef _LOC attr_ , "in alternative"+                                             , getName con_ , "of nonterminal",getName nt_ ,"."+                                             ]>-<+                                       wfill ["Location:", (showPos attr_),"."]+                               pat   =   "SEM" >#< nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr _LOC attr_ >#< ": ...")+                               help  = wfill ["The", showAttrDef _LOC attr_, "in alternative", getName con_+                                             ,"of nonterminal", getName nt_, "is needed in two separate visits to", getName nt_+                                             ,"so its type is needed to generate type signatures."+                                             ,"Please supply its type."+                                             ]+                               act  = wfill ["The type signatures of semantic functions are not generated."]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           MissingTypeSig nt_ con_ attr_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_ParserError :: Pos ->+                         String ->+                         String ->+                         T_Error+sem_Error_ParserError pos_ problem_ action_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 64, column 21)+                       _lhsOpp =+                           let mesg = text ("parser expecting " ++ problem_)+                               pat  = text ""+                               help = text ""+                               act  = text action_+                            in ppError (isError _me) pos_ mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           ParserError pos_ problem_ action_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_SuperfluousRule :: Nonterminal ->+                             Constructor ->+                             Name ->+                             Name ->+                             T_Error+sem_Error_SuperfluousRule nt_ con_ field_ attr_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 268, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Rule for non-existing", showAttrDef field_ attr_ , "at alternative"+                                             , getName con_ , "of nonterminal",getName nt_, "."+                                             ]+                               pat   =   "SEM" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr field_ attr_ >#< "= ...")+                               help =  wfill ["There is a rule for" , showAttrDef field_ attr_ , "in the definitions for alternative" , getName con_+                                             ,"of nonterminal" , getName nt_,  ", but this attribute does not exist. Maybe you misspelled it?"+                                             ,"Otherwise either remove the rule or add an appropriate attribute definition."+                                             ]+                               act  = wfill ["The rule has been ignored."]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           SuperfluousRule nt_ con_ field_ attr_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_UndefAlt :: Nonterminal ->+                      Constructor ->+                      T_Error+sem_Error_UndefAlt nt_ con_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 228, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Constructor", getName con_, "of nonterminal" ,getName nt_, "is  not defined."+                                             ]+                               pat   =   "DATA" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< "...")+                               help =  wfill ["There are rules for alternative", getName con_ , "of nonterminal" ,getName nt_+                                                     ,", but there is no definition for this alternative in the definitions of the"+                                                     ,"nonterminal" , getName nt_, ". Maybe you misspelled it? Otherwise insert a definition."+                                                     ]+                               act  = wfill ["All rules for the unknown alternative have been ignored."]+                           in ppError (isError _me) (getPos con_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           UndefAlt nt_ con_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_UndefAttr :: Nonterminal ->+                       Constructor ->+                       Name ->+                       Name ->+                       T_Error+sem_Error_UndefAttr nt_ con_ field_ attr_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 311, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Undefined", showAttrUse field_ attr_, "at constructor"+                                             , getName con_ , "of nonterminal",getName nt_, "."+                                             ]+                               pat   = "SEM" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< "<field>.<attr> = "+                                                       >#< "..." >#< ppAttrUse field_ attr_ >#< "...")+                               help =  wfill ["A rule in the definitions for alternative" , getName con_ ,"of nonterminal"+                                             ,getName  nt_ , "contains an attribute that is not defined"+                                             ,"Maybe you misspelled it?"+                                             ,"Otherwise either remove the rule or add an appropriate attribute definition."+                                             ]+                               act  = wfill ["The generated program will not run."]+                           in ppError (isError _me) (getPos attr_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           UndefAttr nt_ con_ field_ attr_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_UndefChild :: Nonterminal ->+                        Constructor ->+                        Name ->+                        T_Error+sem_Error_UndefChild nt_ con_ name_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 240, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Constructor", getName con_, "of nonterminal" ,getName nt_+                                             , "does not have a nontrivial field named", getName name_ , "."+                                             ]+                               pat   =   "SEM" >#< nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< ppAttr name_ (identifier "<attr>") >#< "= ...")+                               help =  wfill ["There are rules that define or use attributes of field" , getName name_+                                                     ,"in alternative" , getName con_ , "of nonterminal" , getName nt_+                                                     ,", but there is no field with AG-type in the definition of the alternative."+                                                     ,"Maybe you misspelled it? Otherwise insert the field into the definition,"+                                                     ,"or change its type from an HS-type to an AG-type."+                                                     ]+                               act  = wfill ["All rules for the unknown field have been ignored."]+                           in ppError (isError _me) (getPos name_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           UndefChild nt_ con_ name_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_UndefLocal :: Nonterminal ->+                        Constructor ->+                        Name ->+                        T_Error+sem_Error_UndefLocal nt_ con_ var_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 282, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Undefined local variable or field",getName var_, "at constructor"+                                             , getName con_ , "of nonterminal",getName nt_, "."+                                             ]+                               pat   = "SEM" >#< getName nt_+                                     >-< indent 2 ("|" >#< getName con_ >#< "<field>.<attr> = "+                                                       >#< "..." >#< "@" >|< getName var_ >#< "..." )+                               help =  wfill ["A rule in the definitions for alternative" , getName con_ ,"of nonterminal"+                                             , getName nt_ , "contains a local variable or field name that is not defined"+                                             ,"Maybe you misspelled it?"+                                             ,"Otherwise either remove the rule or add an appropriate definition."+                                             ]+                               act  = wfill ["The generated program will not run."]+                           in ppError (isError _me) (getPos var_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           UndefLocal nt_ con_ var_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+sem_Error_UndefNont :: Nonterminal ->+                       T_Error+sem_Error_UndefNont nt_  =+    (T_Error (\ _lhsIverbose ->+                  (let _lhsOpp :: PP_Doc+                       _lhsOme :: Error+                       -- "PrintErrorMessages.ag"(line 218, column 21)+                       _lhsOpp =+                           let mesg  = wfill ["Nonterminal", getName nt_, "is not defined."+                                             ]+                               pat   = "DATA" >#< getName nt_ >#< "..."+                               help =  wfill ["There are attributes and/or rules for nonterminal" , getName nt_  ,", but there is no definition"+                                                     , "for" ,getName  nt_, ". Maybe you misspelled it? Otherwise insert a definition."+                                                     ]+                               act  = wfill ["Everything regarding the unknown nonterminal has been ignored."]+                           in ppError (isError _me) (getPos nt_) mesg pat help act _lhsIverbose+                       -- self rule+                       _me =+                           UndefNont nt_+                       -- self rule+                       _lhsOme =+                           _me+                   in  ( _lhsOme,_lhsOpp))) )+-- Errors ------------------------------------------------------+{-+   visit 0:+      inherited attribute:+         options              : Options+      synthesized attribute:+         pp                   : PP_Doc+   alternatives:+      alternative Cons:+         child hd             : Error+         child tl             : Errors+         visit 0:+            local verbose     : _+      alternative Nil:+         visit 0:+            local verbose     : _+-}+-- cata+sem_Errors :: Errors ->+              T_Errors+sem_Errors list  =+    (Prelude.foldr sem_Errors_Cons sem_Errors_Nil (Prelude.map sem_Error list) )+-- semantic domain+newtype T_Errors = T_Errors (Options ->+                             ( PP_Doc))+data Inh_Errors = Inh_Errors {options_Inh_Errors :: Options}+data Syn_Errors = Syn_Errors {pp_Syn_Errors :: PP_Doc}+wrap_Errors (T_Errors sem ) (Inh_Errors _lhsIoptions )  =+    (let ( _lhsOpp) =+             (sem _lhsIoptions )+     in  (Syn_Errors _lhsOpp ))+sem_Errors_Cons :: T_Error ->+                   T_Errors ->+                   T_Errors+sem_Errors_Cons (T_Error hd_ ) (T_Errors tl_ )  =+    (T_Errors (\ _lhsIoptions ->+                   (let _lhsOpp :: PP_Doc+                        _hdOverbose :: Bool+                        _tlOoptions :: Options+                        _hdIme :: Error+                        _hdIpp :: PP_Doc+                        _tlIpp :: PP_Doc+                        -- "PrintErrorMessages.ag"(line 59, column 8)+                        _verbose =+                            verbose _lhsIoptions+                        -- use rule "PrintErrorMessages.ag"(line 55, column 49)+                        _lhsOpp =+                            _hdIpp >-< _tlIpp+                        -- copy rule (from local)+                        _hdOverbose =+                            _verbose+                        -- copy rule (down)+                        _tlOoptions =+                            _lhsIoptions+                        ( _hdIme,_hdIpp) =+                            (hd_ _hdOverbose )+                        ( _tlIpp) =+                            (tl_ _tlOoptions )+                    in  ( _lhsOpp))) )+sem_Errors_Nil :: T_Errors+sem_Errors_Nil  =+    (T_Errors (\ _lhsIoptions ->+                   (let _lhsOpp :: PP_Doc+                        -- "PrintErrorMessages.ag"(line 59, column 8)+                        _verbose =+                            verbose _lhsIoptions+                        -- use rule "PrintErrorMessages.ag"(line 55, column 49)+                        _lhsOpp =+                            text ""+                    in  ( _lhsOpp))) )
+ src-derived/SemHsTokens.hs view
@@ -0,0 +1,561 @@+-- UUAGC 0.9.5 (SemHsTokens.ag)+module SemHsTokens where++import UU.DData.Seq as Seq(Seq,empty,single,(<>),toList)+import Pretty++import TokenDef+import HsToken+import ErrorMessages++import CommonTypes+import UU.Scanner.Position(Pos)++isNTname allnts (Just (NT nt)) = nt `elem` allnts+isNTname allnts _              = False+-- HsToken -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         attrs                : [(Identifier,Identifier)]+         con                  : Identifier+         fieldnames           : [Identifier]+         nt                   : Identifier+      synthesized attributes:+         errors               : Seq Error+         tok                  : (Pos,String)+         usedAttrs            : [(Identifier,Identifier)]+         usedFields           : Seq Identifier+         usedLocals           : [Identifier]+   alternatives:+      alternative AGField:+         child field          : {Name}+         child attr           : {Name}+         child pos            : {Pos}+      alternative AGLocal:+         child var            : {Name}+         child pos            : {Pos}+         visit 0:+            local _tup1       : _+            local errors      : _+            local tok         : _+            local usedLocals  : _+      alternative CharToken:+         child value          : {String}+         child pos            : {Pos}+      alternative Err:+         child mesg           : {String}+         child pos            : {Pos}+      alternative HsToken:+         child value          : {String}+         child pos            : {Pos}+      alternative StrToken:+         child value          : {String}+         child pos            : {Pos}+-}+-- cata+sem_HsToken :: HsToken ->+               T_HsToken+sem_HsToken (AGField _field _attr _pos) =+    (sem_HsToken_AGField _field _attr _pos)+sem_HsToken (AGLocal _var _pos) =+    (sem_HsToken_AGLocal _var _pos)+sem_HsToken (CharToken _value _pos) =+    (sem_HsToken_CharToken _value _pos)+sem_HsToken (Err _mesg _pos) =+    (sem_HsToken_Err _mesg _pos)+sem_HsToken (HsToken _value _pos) =+    (sem_HsToken_HsToken _value _pos)+sem_HsToken (StrToken _value _pos) =+    (sem_HsToken_StrToken _value _pos)+-- semantic domain+newtype T_HsToken = T_HsToken (([(Name,Type,Bool)]) ->+                               ([Name]) ->+                               ([(Identifier,Identifier)]) ->+                               Identifier ->+                               ([Identifier]) ->+                               Identifier ->+                               ( (Seq Error),((Pos,String)),([(Identifier,Identifier)]),(Seq Identifier),([Identifier])))+data Inh_HsToken = Inh_HsToken {allfields_Inh_HsToken :: [(Name,Type,Bool)],allnts_Inh_HsToken :: [Name],attrs_Inh_HsToken :: [(Identifier,Identifier)],con_Inh_HsToken :: Identifier,fieldnames_Inh_HsToken :: [Identifier],nt_Inh_HsToken :: Identifier}+data Syn_HsToken = Syn_HsToken {errors_Syn_HsToken :: Seq Error,tok_Syn_HsToken :: (Pos,String),usedAttrs_Syn_HsToken :: [(Identifier,Identifier)],usedFields_Syn_HsToken :: Seq Identifier,usedLocals_Syn_HsToken :: [Identifier]}+wrap_HsToken (T_HsToken sem) (Inh_HsToken _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIfieldnames _lhsInt) =+    (let ( _lhsOerrors,_lhsOtok,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals) =+             (sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIfieldnames _lhsInt)+     in  (Syn_HsToken _lhsOerrors _lhsOtok _lhsOusedAttrs _lhsOusedFields _lhsOusedLocals))+sem_HsToken_AGField :: Name ->+                       Name ->+                       Pos ->+                       T_HsToken+sem_HsToken_AGField field_ attr_ pos_ =+    (T_HsToken (\ _lhsIallfields+                  _lhsIallnts+                  _lhsIattrs+                  _lhsIcon+                  _lhsIfieldnames+                  _lhsInt ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOusedAttrs :: ([(Identifier,Identifier)])+                         _lhsOtok :: ((Pos,String))+                         _lhsOusedFields :: (Seq Identifier)+                         _lhsOusedLocals :: ([Identifier])+                         -- "SemHsTokens.ag"(line 73, column 15)+                         _lhsOerrors =+                             if (field_,attr_) `elem` _lhsIattrs+                                   then Seq.empty+                                   else if not(field_ `elem` (_LHS : _LOC: _lhsIfieldnames))+                                           then Seq.single (UndefChild _lhsInt _lhsIcon field_)+                                           else Seq.single (UndefAttr _lhsInt _lhsIcon field_ attr_)+                         -- "SemHsTokens.ag"(line 87, column 13)+                         _lhsOusedAttrs =+                             [(field_,attr_)]+                         -- "SemHsTokens.ag"(line 113, column 14)+                         _lhsOtok =+                             (pos_, attrname True field_ attr_)+                         -- use rule "SemHsTokens.ag"(line 92, column 40)+                         _lhsOusedFields =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 83, column 40)+                         _lhsOusedLocals =+                             []+                     in  ( _lhsOerrors,_lhsOtok,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+sem_HsToken_AGLocal :: Name ->+                       Pos ->+                       T_HsToken+sem_HsToken_AGLocal var_ pos_ =+    (T_HsToken (\ _lhsIallfields+                  _lhsIallnts+                  _lhsIattrs+                  _lhsIcon+                  _lhsIfieldnames+                  _lhsInt ->+                    (let _lhsOusedFields :: (Seq Identifier)+                         _lhsOerrors :: (Seq Error)+                         _lhsOusedAttrs :: ([(Identifier,Identifier)])+                         _lhsOusedLocals :: ([Identifier])+                         _lhsOtok :: ((Pos,String))+                         -- "SemHsTokens.ag"(line 63, column 19)+                         __tup1 =+                             if var_ `elem` _lhsIfieldnames+                             then if  isNTname _lhsIallnts (lookup var_ (map (\(n,t,_) -> (n,t)) _lhsIallfields))+                                  then (Seq.single(ChildAsLocal _lhsInt _lhsIcon var_), (pos_,fieldname var_), []    )+                                  else (Seq.empty, (pos_,fieldname var_), []    )+                             else if (_LOC,var_) `elem` _lhsIattrs+                             then (Seq.empty                                   , (pos_,locname   var_), [var_])+                             else (Seq.single(UndefLocal _lhsInt _lhsIcon var_), (pos_,locname   var_), []    )+                         -- "SemHsTokens.ag"(line 63, column 19)+                         (_errors,_,_) =+                             __tup1+                         -- "SemHsTokens.ag"(line 63, column 19)+                         (_,_tok,_) =+                             __tup1+                         -- "SemHsTokens.ag"(line 63, column 19)+                         (_,_,_usedLocals) =+                             __tup1+                         -- "SemHsTokens.ag"(line 95, column 13)+                         _lhsOusedFields =+                             if var_ `elem` _lhsIfieldnames+                              then Seq.single var_+                              else Seq.empty+                         -- use rule "SemHsTokens.ag"(line 42, column 37)+                         _lhsOerrors =+                             _errors+                         -- use rule "SemHsTokens.ag"(line 84, column 40)+                         _lhsOusedAttrs =+                             []+                         -- use rule "SemHsTokens.ag"(line 83, column 40)+                         _lhsOusedLocals =+                             _usedLocals+                         -- copy rule (from local)+                         _lhsOtok =+                             _tok+                     in  ( _lhsOerrors,_lhsOtok,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+sem_HsToken_CharToken :: String ->+                         Pos ->+                         T_HsToken+sem_HsToken_CharToken value_ pos_ =+    (T_HsToken (\ _lhsIallfields+                  _lhsIallnts+                  _lhsIattrs+                  _lhsIcon+                  _lhsIfieldnames+                  _lhsInt ->+                    (let _lhsOtok :: ((Pos,String))+                         _lhsOerrors :: (Seq Error)+                         _lhsOusedAttrs :: ([(Identifier,Identifier)])+                         _lhsOusedFields :: (Seq Identifier)+                         _lhsOusedLocals :: ([Identifier])+                         -- "SemHsTokens.ag"(line 117, column 16)+                         _lhsOtok =+                             (pos_, if null value_+                                       then ""+                                       else showCharShort (head value_)+                             )+                         -- use rule "SemHsTokens.ag"(line 42, column 37)+                         _lhsOerrors =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 84, column 40)+                         _lhsOusedAttrs =+                             []+                         -- use rule "SemHsTokens.ag"(line 92, column 40)+                         _lhsOusedFields =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 83, column 40)+                         _lhsOusedLocals =+                             []+                     in  ( _lhsOerrors,_lhsOtok,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+sem_HsToken_Err :: String ->+                   Pos ->+                   T_HsToken+sem_HsToken_Err mesg_ pos_ =+    (T_HsToken (\ _lhsIallfields+                  _lhsIallnts+                  _lhsIattrs+                  _lhsIcon+                  _lhsIfieldnames+                  _lhsInt ->+                    (let _lhsOerrors :: (Seq Error)+                         _lhsOtok :: ((Pos,String))+                         _lhsOusedAttrs :: ([(Identifier,Identifier)])+                         _lhsOusedFields :: (Seq Identifier)+                         _lhsOusedLocals :: ([Identifier])+                         -- "SemHsTokens.ag"(line 49, column 9)+                         _lhsOerrors =+                             let m = text mesg_+                             in Seq.single (CustomError False pos_ m)+                         -- "SemHsTokens.ag"(line 123, column 16)+                         _lhsOtok =+                             (pos_, "")+                         -- use rule "SemHsTokens.ag"(line 84, column 40)+                         _lhsOusedAttrs =+                             []+                         -- use rule "SemHsTokens.ag"(line 92, column 40)+                         _lhsOusedFields =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 83, column 40)+                         _lhsOusedLocals =+                             []+                     in  ( _lhsOerrors,_lhsOtok,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+sem_HsToken_HsToken :: String ->+                       Pos ->+                       T_HsToken+sem_HsToken_HsToken value_ pos_ =+    (T_HsToken (\ _lhsIallfields+                  _lhsIallnts+                  _lhsIattrs+                  _lhsIcon+                  _lhsIfieldnames+                  _lhsInt ->+                    (let _lhsOtok :: ((Pos,String))+                         _lhsOerrors :: (Seq Error)+                         _lhsOusedAttrs :: ([(Identifier,Identifier)])+                         _lhsOusedFields :: (Seq Identifier)+                         _lhsOusedLocals :: ([Identifier])+                         -- "SemHsTokens.ag"(line 115, column 14)+                         _lhsOtok =+                             (pos_, value_)+                         -- use rule "SemHsTokens.ag"(line 42, column 37)+                         _lhsOerrors =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 84, column 40)+                         _lhsOusedAttrs =+                             []+                         -- use rule "SemHsTokens.ag"(line 92, column 40)+                         _lhsOusedFields =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 83, column 40)+                         _lhsOusedLocals =+                             []+                     in  ( _lhsOerrors,_lhsOtok,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+sem_HsToken_StrToken :: String ->+                        Pos ->+                        T_HsToken+sem_HsToken_StrToken value_ pos_ =+    (T_HsToken (\ _lhsIallfields+                  _lhsIallnts+                  _lhsIattrs+                  _lhsIcon+                  _lhsIfieldnames+                  _lhsInt ->+                    (let _lhsOtok :: ((Pos,String))+                         _lhsOerrors :: (Seq Error)+                         _lhsOusedAttrs :: ([(Identifier,Identifier)])+                         _lhsOusedFields :: (Seq Identifier)+                         _lhsOusedLocals :: ([Identifier])+                         -- "SemHsTokens.ag"(line 122, column 16)+                         _lhsOtok =+                             (pos_, showStrShort value_)+                         -- use rule "SemHsTokens.ag"(line 42, column 37)+                         _lhsOerrors =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 84, column 40)+                         _lhsOusedAttrs =+                             []+                         -- use rule "SemHsTokens.ag"(line 92, column 40)+                         _lhsOusedFields =+                             Seq.empty+                         -- use rule "SemHsTokens.ag"(line 83, column 40)+                         _lhsOusedLocals =+                             []+                     in  ( _lhsOerrors,_lhsOtok,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+-- HsTokens ----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         attrs                : [(Identifier,Identifier)]+         con                  : Identifier+         fieldnames           : [Identifier]+         nt                   : Identifier+      synthesized attributes:+         errors               : Seq Error+         tks                  : [(Pos,String)]+         usedAttrs            : [(Identifier,Identifier)]+         usedFields           : Seq Identifier+         usedLocals           : [Identifier]+   alternatives:+      alternative Cons:+         child hd             : HsToken+         child tl             : HsTokens+      alternative Nil:+-}+-- cata+sem_HsTokens :: HsTokens ->+                T_HsTokens+sem_HsTokens list =+    (Prelude.foldr sem_HsTokens_Cons sem_HsTokens_Nil (Prelude.map sem_HsToken list))+-- semantic domain+newtype T_HsTokens = T_HsTokens (([(Name,Type,Bool)]) ->+                                 ([Name]) ->+                                 ([(Identifier,Identifier)]) ->+                                 Identifier ->+                                 ([Identifier]) ->+                                 Identifier ->+                                 ( (Seq Error),([(Pos,String)]),([(Identifier,Identifier)]),(Seq Identifier),([Identifier])))+data Inh_HsTokens = Inh_HsTokens {allfields_Inh_HsTokens :: [(Name,Type,Bool)],allnts_Inh_HsTokens :: [Name],attrs_Inh_HsTokens :: [(Identifier,Identifier)],con_Inh_HsTokens :: Identifier,fieldnames_Inh_HsTokens :: [Identifier],nt_Inh_HsTokens :: Identifier}+data Syn_HsTokens = Syn_HsTokens {errors_Syn_HsTokens :: Seq Error,tks_Syn_HsTokens :: [(Pos,String)],usedAttrs_Syn_HsTokens :: [(Identifier,Identifier)],usedFields_Syn_HsTokens :: Seq Identifier,usedLocals_Syn_HsTokens :: [Identifier]}+wrap_HsTokens (T_HsTokens sem) (Inh_HsTokens _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIfieldnames _lhsInt) =+    (let ( _lhsOerrors,_lhsOtks,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals) =+             (sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIfieldnames _lhsInt)+     in  (Syn_HsTokens _lhsOerrors _lhsOtks _lhsOusedAttrs _lhsOusedFields _lhsOusedLocals))+sem_HsTokens_Cons :: T_HsToken ->+                     T_HsTokens ->+                     T_HsTokens+sem_HsTokens_Cons (T_HsToken hd_) (T_HsTokens tl_) =+    (T_HsTokens (\ _lhsIallfields+                   _lhsIallnts+                   _lhsIattrs+                   _lhsIcon+                   _lhsIfieldnames+                   _lhsInt ->+                     (let _lhsOtks :: ([(Pos,String)])+                          _lhsOerrors :: (Seq Error)+                          _lhsOusedAttrs :: ([(Identifier,Identifier)])+                          _lhsOusedFields :: (Seq Identifier)+                          _lhsOusedLocals :: ([Identifier])+                          _hdOallfields :: ([(Name,Type,Bool)])+                          _hdOallnts :: ([Name])+                          _hdOattrs :: ([(Identifier,Identifier)])+                          _hdOcon :: Identifier+                          _hdOfieldnames :: ([Identifier])+                          _hdOnt :: Identifier+                          _tlOallfields :: ([(Name,Type,Bool)])+                          _tlOallnts :: ([Name])+                          _tlOattrs :: ([(Identifier,Identifier)])+                          _tlOcon :: Identifier+                          _tlOfieldnames :: ([Identifier])+                          _tlOnt :: Identifier+                          _hdIerrors :: (Seq Error)+                          _hdItok :: ((Pos,String))+                          _hdIusedAttrs :: ([(Identifier,Identifier)])+                          _hdIusedFields :: (Seq Identifier)+                          _hdIusedLocals :: ([Identifier])+                          _tlIerrors :: (Seq Error)+                          _tlItks :: ([(Pos,String)])+                          _tlIusedAttrs :: ([(Identifier,Identifier)])+                          _tlIusedFields :: (Seq Identifier)+                          _tlIusedLocals :: ([Identifier])+                          -- "SemHsTokens.ag"(line 109, column 10)+                          _lhsOtks =+                              _hdItok : _tlItks+                          -- use rule "SemHsTokens.ag"(line 42, column 37)+                          _lhsOerrors =+                              _hdIerrors Seq.<> _tlIerrors+                          -- use rule "SemHsTokens.ag"(line 84, column 40)+                          _lhsOusedAttrs =+                              _hdIusedAttrs ++ _tlIusedAttrs+                          -- use rule "SemHsTokens.ag"(line 92, column 40)+                          _lhsOusedFields =+                              _hdIusedFields Seq.<> _tlIusedFields+                          -- use rule "SemHsTokens.ag"(line 83, column 40)+                          _lhsOusedLocals =+                              _hdIusedLocals ++ _tlIusedLocals+                          -- copy rule (down)+                          _hdOallfields =+                              _lhsIallfields+                          -- copy rule (down)+                          _hdOallnts =+                              _lhsIallnts+                          -- copy rule (down)+                          _hdOattrs =+                              _lhsIattrs+                          -- copy rule (down)+                          _hdOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _hdOfieldnames =+                              _lhsIfieldnames+                          -- copy rule (down)+                          _hdOnt =+                              _lhsInt+                          -- copy rule (down)+                          _tlOallfields =+                              _lhsIallfields+                          -- copy rule (down)+                          _tlOallnts =+                              _lhsIallnts+                          -- copy rule (down)+                          _tlOattrs =+                              _lhsIattrs+                          -- copy rule (down)+                          _tlOcon =+                              _lhsIcon+                          -- copy rule (down)+                          _tlOfieldnames =+                              _lhsIfieldnames+                          -- copy rule (down)+                          _tlOnt =+                              _lhsInt+                          ( _hdIerrors,_hdItok,_hdIusedAttrs,_hdIusedFields,_hdIusedLocals) =+                              (hd_ _hdOallfields _hdOallnts _hdOattrs _hdOcon _hdOfieldnames _hdOnt)+                          ( _tlIerrors,_tlItks,_tlIusedAttrs,_tlIusedFields,_tlIusedLocals) =+                              (tl_ _tlOallfields _tlOallnts _tlOattrs _tlOcon _tlOfieldnames _tlOnt)+                      in  ( _lhsOerrors,_lhsOtks,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+sem_HsTokens_Nil :: T_HsTokens+sem_HsTokens_Nil  =+    (T_HsTokens (\ _lhsIallfields+                   _lhsIallnts+                   _lhsIattrs+                   _lhsIcon+                   _lhsIfieldnames+                   _lhsInt ->+                     (let _lhsOtks :: ([(Pos,String)])+                          _lhsOerrors :: (Seq Error)+                          _lhsOusedAttrs :: ([(Identifier,Identifier)])+                          _lhsOusedFields :: (Seq Identifier)+                          _lhsOusedLocals :: ([Identifier])+                          -- "SemHsTokens.ag"(line 110, column 10)+                          _lhsOtks =+                              []+                          -- use rule "SemHsTokens.ag"(line 42, column 37)+                          _lhsOerrors =+                              Seq.empty+                          -- use rule "SemHsTokens.ag"(line 84, column 40)+                          _lhsOusedAttrs =+                              []+                          -- use rule "SemHsTokens.ag"(line 92, column 40)+                          _lhsOusedFields =+                              Seq.empty+                          -- use rule "SemHsTokens.ag"(line 83, column 40)+                          _lhsOusedLocals =+                              []+                      in  ( _lhsOerrors,_lhsOtks,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))+-- HsTokensRoot ------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allfields            : [(Name,Type,Bool)]+         allnts               : [Name]+         attrs                : [(Identifier,Identifier)]+         con                  : Identifier+         nt                   : Identifier+      synthesized attributes:+         errors               : Seq Error+         textLines            : [String]+         usedAttrs            : [(Identifier,Identifier)]+         usedFields           : [Identifier]+         usedLocals           : [Identifier]+   alternatives:+      alternative HsTokensRoot:+         child tokens         : HsTokens+-}+-- cata+sem_HsTokensRoot :: HsTokensRoot ->+                    T_HsTokensRoot+sem_HsTokensRoot (HsTokensRoot _tokens) =+    (sem_HsTokensRoot_HsTokensRoot (sem_HsTokens _tokens))+-- semantic domain+newtype T_HsTokensRoot = T_HsTokensRoot (([(Name,Type,Bool)]) ->+                                         ([Name]) ->+                                         ([(Identifier,Identifier)]) ->+                                         Identifier ->+                                         Identifier ->+                                         ( (Seq Error),([String]),([(Identifier,Identifier)]),([Identifier]),([Identifier])))+data Inh_HsTokensRoot = Inh_HsTokensRoot {allfields_Inh_HsTokensRoot :: [(Name,Type,Bool)],allnts_Inh_HsTokensRoot :: [Name],attrs_Inh_HsTokensRoot :: [(Identifier,Identifier)],con_Inh_HsTokensRoot :: Identifier,nt_Inh_HsTokensRoot :: Identifier}+data Syn_HsTokensRoot = Syn_HsTokensRoot {errors_Syn_HsTokensRoot :: Seq Error,textLines_Syn_HsTokensRoot :: [String],usedAttrs_Syn_HsTokensRoot :: [(Identifier,Identifier)],usedFields_Syn_HsTokensRoot :: [Identifier],usedLocals_Syn_HsTokensRoot :: [Identifier]}+wrap_HsTokensRoot (T_HsTokensRoot sem) (Inh_HsTokensRoot _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsInt) =+    (let ( _lhsOerrors,_lhsOtextLines,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals) =+             (sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsInt)+     in  (Syn_HsTokensRoot _lhsOerrors _lhsOtextLines _lhsOusedAttrs _lhsOusedFields _lhsOusedLocals))+sem_HsTokensRoot_HsTokensRoot :: T_HsTokens ->+                                 T_HsTokensRoot+sem_HsTokensRoot_HsTokensRoot (T_HsTokens tokens_) =+    (T_HsTokensRoot (\ _lhsIallfields+                       _lhsIallnts+                       _lhsIattrs+                       _lhsIcon+                       _lhsInt ->+                         (let _tokensOfieldnames :: ([Identifier])+                              _lhsOusedFields :: ([Identifier])+                              _lhsOtextLines :: ([String])+                              _lhsOerrors :: (Seq Error)+                              _lhsOusedAttrs :: ([(Identifier,Identifier)])+                              _lhsOusedLocals :: ([Identifier])+                              _tokensOallfields :: ([(Name,Type,Bool)])+                              _tokensOallnts :: ([Name])+                              _tokensOattrs :: ([(Identifier,Identifier)])+                              _tokensOcon :: Identifier+                              _tokensOnt :: Identifier+                              _tokensIerrors :: (Seq Error)+                              _tokensItks :: ([(Pos,String)])+                              _tokensIusedAttrs :: ([(Identifier,Identifier)])+                              _tokensIusedFields :: (Seq Identifier)+                              _tokensIusedLocals :: ([Identifier])+                              -- "SemHsTokens.ag"(line 37, column 18)+                              _tokensOfieldnames =+                                  map (\(n,_,_) -> n) _lhsIallfields+                              -- "SemHsTokens.ag"(line 99, column 18)+                              _lhsOusedFields =+                                  Seq.toList _tokensIusedFields+                              -- "SemHsTokens.ag"(line 106, column 18)+                              _lhsOtextLines =+                                  showTokens _tokensItks+                              -- use rule "SemHsTokens.ag"(line 16, column 18)+                              _lhsOerrors =+                                  _tokensIerrors+                              -- copy rule (up)+                              _lhsOusedAttrs =+                                  _tokensIusedAttrs+                              -- copy rule (up)+                              _lhsOusedLocals =+                                  _tokensIusedLocals+                              -- copy rule (down)+                              _tokensOallfields =+                                  _lhsIallfields+                              -- copy rule (down)+                              _tokensOallnts =+                                  _lhsIallnts+                              -- copy rule (down)+                              _tokensOattrs =+                                  _lhsIattrs+                              -- copy rule (down)+                              _tokensOcon =+                                  _lhsIcon+                              -- copy rule (down)+                              _tokensOnt =+                                  _lhsInt+                              ( _tokensIerrors,_tokensItks,_tokensIusedAttrs,_tokensIusedFields,_tokensIusedLocals) =+                                  (tokens_ _tokensOallfields _tokensOallnts _tokensOattrs _tokensOcon _tokensOfieldnames _tokensOnt)+                          in  ( _lhsOerrors,_lhsOtextLines,_lhsOusedAttrs,_lhsOusedFields,_lhsOusedLocals))))
+ src-derived/Transform.hs view
@@ -0,0 +1,3548 @@+-- UUAGC 0.9.5 (Transform.ag)+module Transform where++import Control.Monad(mplus,mzero)+import List (partition, elem)+import Data.Maybe+import qualified Data.Map as Map+import Data.Map (Map)+import Data.Set as Set (Set, member, union, toList, fromList, empty, singleton, member, unions, size, fold, intersection, difference, insert)+import UU.DData.Seq as Seq (Seq, empty, (<>), single, cons, toList, fromList)+import UU.Scanner.Position(noPos)++import ConcreteSyntax+import AbstractSyntax+import ErrorMessages+import Patterns (Patterns(..),Pattern(..))+import Expression (Expression(..))++import Options+import CommonTypes++import UU.Scanner.Position (Pos)+import Patterns   (Pattern)+import Expression (Expression)+import CommonTypes++-- Patterns.ag imports+import UU.Scanner.Position(Pos)+import CommonTypes (Constructor,Name)+type DefinedSets = Map Name (Set Nonterminal) +type FieldMap  = [(Name, Type)] +type DataTypes = Map.Map Nonterminal (Map.Map Constructor FieldMap) +type AttrName = (Name,Name) +type RuleInfo = ([AttrName]->Pattern, Expression, [AttrName], Bool, String) +type SigInfo  = (Identifier,Type) +++checkDuplicate :: (Identifier -> Identifier -> Error)+               -> Identifier -> val -> Map Identifier val -> (Map Identifier val,Seq Error)+checkDuplicate dupError key val m+  = case Map.lookupIndex key m of+     Just ix -> let (key',_) = Map.elemAt ix m+                in  (m,Seq.single (dupError key key'))+     Nothing -> (Map.insert key val m,Seq.empty)++checkDuplicates :: (Identifier -> Identifier -> Error)+                -> [(Identifier, val)] -> Map Identifier val -> (Map Identifier val,Seq Error)+checkDuplicates dupError new m = foldErrors check m new+ where  check = uncurry (checkDuplicate dupError)++foldErrors f e xs = foldl g (e,Seq.empty) xs+  where g ~(e,es) x = let (e',es') = f x e+                      in (e', es <> es')+++checkForDuplicates :: (Identifier -> Identifier -> Error)  ->  [Identifier]  ->  [Error]+checkForDuplicates err [] = []+checkForDuplicates err (x:xs) = let (same,other) = List.partition (equalId x) xs+                                in  map (err x) same ++ checkForDuplicates err other++equalId :: Identifier -> Identifier -> Bool+equalId x y = getName x == getName y+++type RulesAndErrors = ([Rule], Seq Error)+type SigsAndErrors  = ([TypeSig], Seq Error)+type InstsAndErrors = ([(Identifier, Type)], Seq Error)+type AttrOverwrite  = Map AttrName Bool+type AccumRuleCheck = (RulesAndErrors, AttrOverwrite)+type AccumDefiCheck = (Seq Error, AttrOverwrite, [AttrName], [AttrName])++checkRules :: Map Nonterminal (Attributes, Attributes) -> Map Nonterminal (Map Constructor FieldMap) ->+              Map Nonterminal (Map Constructor [Identifier]) -> Map Nonterminal (Map Constructor [SigInfo]) ->+              Nonterminal -> Constructor -> [RuleInfo] -> RulesAndErrors+checkRules attributes fields allinsts allsigs nt con rs+  = let fieldmap :: FieldMap+        fieldmap = (_LHS,NT nt) : (_LOC,NT undefined) : (_INST, NT undefined) : (_FIRST, NT undefined) : (_LAST, NT undefined)+                 : Map.findWithDefault [] con (Map.findWithDefault Map.empty nt fields)+                 ++ mapMaybe (\instNm -> lookup instNm sigs >>= \tp -> return (instNm, tp)) (Map.findWithDefault [] con (Map.findWithDefault Map.empty nt allinsts))+        +        sigs = Map.findWithDefault [] con (Map.findWithDefault Map.empty nt allsigs)++        hasAttrib f tp attr  = Map.member attr (f (Map.findWithDefault (Map.empty,Map.empty) tp attributes))+  +        checkRule :: RuleInfo -> AccumRuleCheck -> AccumRuleCheck+        checkRule (pat,exp,as,owrt,str) ((r1,e1),m1) +          = let (e2,m2,u2,b2) = foldr (checkDefi owrt) (e1,m1,[],[]) as+            in  ( (Rule (pat u2) exp owrt str : r1, e2), m2)++        checkDefi :: Bool -> AttrName -> AccumDefiCheck -> AccumDefiCheck+        checkDefi owrt fa@(field,attr) (e,m,u,bs)+         = case lookup field fieldmap+            of  Just (NT tp) -> if field == _LOC || field == _INST || field == _FIRST || field == _LAST+                                   || hasAttrib (if getName field==getName _LHS then snd else fst) tp attr+                                 then case Map.lookupIndex fa m +                                       of  Just ix -> let ((_,attr2),b) = Map.elemAt ix m+                                                       in  if b && not (fa `elem` bs)+                                                            then (                                             e, Map.insert fa owrt m, fa:u, fa:bs)+                                                            else (Seq.cons (DupRule nt con field attr2 attr)   e,                    m, fa:u,    bs)+                                           Nothing ->            (                                             e, Map.insert fa owrt m,    u, fa:bs)+                                 else                            (Seq.cons (SuperfluousRule nt con field attr) e,                    m, fa:u,    bs)+                _            ->                                  (Seq.cons (UndefChild nt con field)           e,                    m, fa:u,    bs )++    in  fst (foldr checkRule (([],Seq.empty),Map.empty) rs)++checkSigs :: Nonterminal -> Constructor -> [SigInfo] -> SigsAndErrors+checkSigs nt con sis +  = let checkSig (ide,typ) (sigs,errs)+         = if   ide `elem` map (\(TypeSig n t)-> n) sigs+           then (sigs, Seq.cons (DupSig nt con ide) errs)+           -- else if not (ide `elem` locattrdefs)+           -- then (sigs, Seq.cons (SupSig nt con ide) errs)+           else (TypeSig ide typ:sigs, errs)+    in  foldr checkSig ([],Seq.empty) sis++checkInsts :: Map Nonterminal (Map Constructor [SigInfo]) -> Nonterminal -> Constructor -> [Identifier] -> InstsAndErrors+checkInsts sigMap nt con+  = foldr (\inst (insts, errs) -> maybe (insts, Seq.single (MissingInstSig nt con inst) <> errs)+                                        (\info -> (info : insts, errs)) $ findSig inst) ([], Seq.empty)+  where+    sigs = Map.findWithDefault [] con (Map.findWithDefault Map.empty nt sigMap)+    +    findSig name+      = do tp@(NT _) <- lookup name sigs+           return (name, tp)++flattenDatas :: DataTypes -> Map Nonterminal (Set Nonterminal)+flattenDatas ds = Map.map flatten ds+  where flatten cs =  Set.fromList [ nt | (_,NT nt) <- concatMap snd (Map.toList cs)]++reachableFrom :: Map Nonterminal (Set Nonterminal) -> Set Nonterminal -> Set Nonterminal+reachableFrom table nts = reach nts+  where reach nts = let nts' = Set.unions (nts : [ ns  | nt <- Set.toList nts+                                                 , let ns = Map.findWithDefault Set.empty nt table ])+                    in if Set.size nts' > Set.size nts+                          then reach nts'+                          else nts+invert :: Map Nonterminal (Set Nonterminal) -> Map Nonterminal (Set Nonterminal)+invert m = foldr inv Map.empty (Map.toList m)+  where inv (x,ns) m = fold (\n m -> Map.insertWith Set.union n (Set.singleton x) m) m ns++path :: Map Nonterminal (Set Nonterminal) -> Nonterminal -> Nonterminal -> Set Nonterminal+path table from to = let children = Map.findWithDefault Set.empty from table+                         forward  = reachableFrom table children+                         backward = reachableFrom (invert table)+                                                  (Set.singleton to)+                     in  Set.intersection forward backward++pragmaMapUnion :: PragmaMap -> PragmaMap -> PragmaMap+pragmaMapUnion = Map.unionWith (Map.unionWith Set.union)++pragmaMapSingle :: Nonterminal -> Constructor -> Set Name -> PragmaMap+pragmaMapSingle nt con nms = Map.singleton nt (Map.singleton con nms)++orderMapUnion :: AttrOrderMap -> AttrOrderMap -> AttrOrderMap+orderMapUnion = Map.unionWith (Map.unionWith Set.union)++orderMapSingle :: Nonterminal -> Constructor -> Set Dependency -> AttrOrderMap+orderMapSingle nt con deps = Map.singleton nt (Map.singleton con deps)++mergeDerivings m1 m2 = foldr (\(n,cs) m -> Map.insertWith Set.union n cs m) m2 (Map.toList m1)++merge x y = foldr f y (Map.toList x)+ where f ~(k,v) m = Map.insertWith (Map.union) k v m++checkAttrs allFields nts inherited synthesized decls = foldErrors check decls nts where+  check nt decls | not (nt `Map.member` allFields) = (decls,Seq.single(UndefNont nt))+                 | otherwise = let (inh,syn) = Map.findWithDefault (Map.empty,Map.empty) nt decls+                                   (inh',einh) = checkDuplicates (DupInhAttr nt) inherited   inh+                                   (syn',esyn) = checkDuplicates (DupSynAttr nt) synthesized syn+                               in (Map.insert nt (inh',syn') decls,einh <> esyn)++addSelf name atMap = let (eInh,eSyn) = Map.findWithDefault(Map.empty,Map.empty) name atMap+                     in  Map.insert name (eInh, Map.insert (Ident "self" noPos) (NT _SELF) eSyn)atMap++makeType :: Set Nonterminal -> Type -> Type+makeType nts tp@(NT x) | x == _SELF       = tp+                       | Set.member x nts = tp+                       | otherwise        = Haskell (getName x)+makeType _   tp                           = tp++constructGrammar ::    Set Nonterminal+                    -> DataTypes+                    -> Map Nonterminal (Attributes, Attributes)+                    -> Map Nonterminal (Map Name (String, String, String))+                    -> Derivings+                    -> Set Nonterminal+                    -> Map Nonterminal (Map Constructor [Rule])+                    -> Map Nonterminal (Map Constructor [TypeSig])+                    -> Map Nonterminal (Map Constructor [(Identifier, Type)])+                    -> TypeSyns+                    -> PragmaMap+                    -> AttrOrderMap+                    -> Grammar++constructGrammar nts gram attrs uses derivings wrappers allrules tsigs allinsts tsyns pragmaMap orderMap =+   let gr = [ (nt,Map.toList alts) | (nt,alts) <- Map.toList gram]+       prods = map prod gr+       prod (nt,alts) =  let (inh,syn) = Map.findWithDefault (Map.empty,Map.empty) nt attrs+                             rmap      = Map.findWithDefault Map.empty             nt allrules+                             tsmap     = Map.findWithDefault Map.empty             nt tsigs+                             instsmap  = Map.findWithDefault Map.empty             nt allinsts+                             alt (con,flds) =+                                   let rules = maybe [] id (Map.lookup con rmap)+                                       tsigs = maybe [] id (Map.lookup con tsmap)+                                       insts = maybe [] id (Map.lookup con instsmap)+                                       cldrn = map (child False) flds ++ map (child True) insts+                                       child isVirtual (nm, tp) =+                                          let (inh,syn) = case tp of+                                                 NT nt -> Map.findWithDefault (Map.empty,Map.empty) nt attrs+                                                 _     -> (Map.empty,Map.empty)+                                          in Child nm tp inh syn isVirtual+                                   in Alternative con cldrn rules tsigs+                            in Production nt inh syn (map alt alts)+   in Grammar tsyns uses derivings wrappers prods pragmaMap orderMap++mapUnionWithSetUnion = Map.unionWith Set.union+mapUnionWithPlusPlus = Map.unionWith (++)+-- AG ----------------------------------------------------------+{-+   visit 0:+      inherited attribute:+         options              : Options+      synthesized attributes:+         blocks               : Blocks+         errors               : Seq Error+         moduleDecl           : Maybe (String,String,String)+         output               : Grammar+         pragmas              : Options -> Options+   alternatives:+      alternative AG:+         child elems          : Elems+         visit 0:+            local allFields   : _+            local allConstrs  : _+            local allRules    : _+            local allSigs     : _+            local allInsts    : _+            local allRulesErrs : _+            local allSigsErrs : _+            local allInstsErrs : _+            local checkedRules : _+            local checkedSigs : _+            local checkedInsts : _+            local errs1       : _+            local errs2       : _+            local errs3       : _+            local errs4       : _+            local errs5       : _+            local errs6       : _+            local allNonterminals : _+            local allAttrDecls : _+-}+-- cata+sem_AG :: AG ->+          T_AG+sem_AG (AG _elems) =+    (sem_AG_AG (sem_Elems _elems))+-- semantic domain+newtype T_AG = T_AG (Options ->+                     ( Blocks,(Seq Error),(Maybe (String,String,String)),Grammar,(Options -> Options)))+data Inh_AG = Inh_AG {options_Inh_AG :: Options}+data Syn_AG = Syn_AG {blocks_Syn_AG :: Blocks,errors_Syn_AG :: Seq Error,moduleDecl_Syn_AG :: Maybe (String,String,String),output_Syn_AG :: Grammar,pragmas_Syn_AG :: Options -> Options}+wrap_AG (T_AG sem) (Inh_AG _lhsIoptions) =+    (let ( _lhsOblocks,_lhsOerrors,_lhsOmoduleDecl,_lhsOoutput,_lhsOpragmas) =+             (sem _lhsIoptions)+     in  (Syn_AG _lhsOblocks _lhsOerrors _lhsOmoduleDecl _lhsOoutput _lhsOpragmas))+sem_AG_AG :: T_Elems ->+             T_AG+sem_AG_AG (T_Elems elems_) =+    (T_AG (\ _lhsIoptions ->+               (let _lhsOoutput :: Grammar+                    _lhsOerrors :: (Seq Error)+                    _elemsOallConstructors :: (Map Nonterminal (Set Constructor))+                    _elemsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                    _elemsOdefinedSets :: DefinedSets+                    _elemsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                    _lhsOblocks :: Blocks+                    _lhsOmoduleDecl :: (Maybe (String,String,String))+                    _lhsOpragmas :: (Options -> Options)+                    _elemsOallAttrDecls :: (Map Nonterminal (Attributes, Attributes))+                    _elemsOallFields :: DataTypes+                    _elemsOallNonterminals :: (Set Nonterminal)+                    _elemsIattrDecls :: (Map Nonterminal (Attributes, Attributes))+                    _elemsIattrOrderCollect :: AttrOrderMap+                    _elemsIblocks :: Blocks+                    _elemsIcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                    _elemsIcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                    _elemsIcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                    _elemsIcollectedNames :: (Set Name)+                    _elemsIcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                    _elemsIcollectedSetNames :: (Set Name)+                    _elemsIcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                    _elemsIdefSets :: (Map Name (Set Nonterminal,Set Name))+                    _elemsIderivings :: Derivings+                    _elemsIerrors :: (Seq Error)+                    _elemsImoduleDecl :: (Maybe (String,String,String))+                    _elemsIorderDepErrorsCollect :: (Seq Error)+                    _elemsIpragmas :: (Options -> Options)+                    _elemsIsemPragmasCollect :: PragmaMap+                    _elemsItypeSyns :: TypeSyns+                    _elemsIuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                    _elemsIwrappers :: (Set Nonterminal)+                    -- "Transform.ag"(line 45, column 8)+                    _lhsOoutput =+                        constructGrammar _allNonterminals+                                         _allFields+                                         _allAttrDecls+                                         _elemsIuseMap+                                         _elemsIderivings+                                         (if wrappers _lhsIoptions then _allNonterminals     else _elemsIwrappers)+                                         _checkedRules+                                         _checkedSigs+                                         _checkedInsts+                                         _elemsItypeSyns+                                         _elemsIsemPragmasCollect+                                         _elemsIattrOrderCollect+                    -- "Transform.ag"(line 217, column 10)+                    _allFields =+                        let f (nt,con,fm) = Map.insertWith (Map.unionWith (++)) nt (Map.singleton con fm)+                        in  foldr f (Map.empty) _elemsIcollectedFields+                    -- "Transform.ag"(line 220, column 10)+                    _allConstrs =+                        let f (nt,con,_) = Map.insertWith (++) nt [con]+                        in  foldr f (Map.empty) _elemsIcollectedFields+                    -- "Transform.ag"(line 223, column 10)+                    _allRules =+                        let f (nt,con,r) = Map.insertWith (Map.unionWith (++)) nt (Map.singleton con [r])+                        in  foldr f (Map.empty) _elemsIcollectedRules+                    -- "Transform.ag"(line 226, column 10)+                    _allSigs =+                        let f (nt,con,t) = Map.insertWith (Map.unionWith (++)) nt (Map.singleton con [t])+                        in  foldr f (Map.empty) _elemsIcollectedSigs+                    -- "Transform.ag"(line 229, column 10)+                    _allInsts =+                        let f (nt,con,is) = Map.insertWith (Map.unionWith (++)) nt (Map.singleton con is)+                        in  foldr f (Map.empty) _elemsIcollectedInsts+                    -- "Transform.ag"(line 232, column 10)+                    _allRulesErrs =+                        Map.mapWithKey (Map.mapWithKey . (checkRules _allAttrDecls _allFields _allInsts _allSigs    )) _allRules+                    -- "Transform.ag"(line 233, column 10)+                    _allSigsErrs =+                        Map.mapWithKey (Map.mapWithKey . (checkSigs                                                 )) _allSigs+                    -- "Transform.ag"(line 234, column 10)+                    _allInstsErrs =+                        Map.mapWithKey (Map.mapWithKey . (checkInsts _allSigs                                       )) _allInsts+                    -- "Transform.ag"(line 236, column 10)+                    _checkedRules =+                        Map.map (Map.map fst) _allRulesErrs+                    -- "Transform.ag"(line 237, column 10)+                    _checkedSigs =+                        Map.map (Map.map fst) _allSigsErrs+                    -- "Transform.ag"(line 238, column 10)+                    _checkedInsts =+                        Map.map (Map.map fst) _allInstsErrs+                    -- "Transform.ag"(line 240, column 10)+                    _errs1 =+                        let f = checkForDuplicates (DupSynonym)+                        in  Seq.fromList . f . map fst $ _elemsItypeSyns+                    -- "Transform.ag"(line 243, column 10)+                    _errs2 =+                        let g nt (con,fm) = checkForDuplicates (DupChild nt con) (map fst fm)+                            f (nt,cfm)    = concat . map (g nt) . Map.toList $ cfm+                        in  Seq.fromList . concat . map f . Map.toList $ _allFields+                    -- "Transform.ag"(line 247, column 10)+                    _errs3 =+                        let f (nt,cons) = checkForDuplicates (DupAlt nt) cons+                        in   Seq.empty+                    -- "Transform.ag"(line 251, column 10)+                    _errs4 =+                        let  f m s = Map.fold ((<>) . snd) s m+                        in Map.fold f Seq.empty _allRulesErrs+                    -- "Transform.ag"(line 254, column 10)+                    _errs5 =+                        let  f m s = Map.fold ((<>) . snd) s m+                        in Map.fold f Seq.empty _allSigsErrs+                    -- "Transform.ag"(line 257, column 10)+                    _errs6 =+                        let  f m s = Map.fold ((<>) . snd) s m+                        in Map.fold f Seq.empty _allInstsErrs+                    -- "Transform.ag"(line 260, column 10)+                    _lhsOerrors =+                        _elemsIerrors <> _errs1 <> _errs2 <> _errs3 <> _errs4 <> _errs5 <> _errs6 <> _elemsIorderDepErrorsCollect+                    -- "Transform.ag"(line 343, column 10)+                    _allNonterminals =+                        _elemsIcollectedNames `Set.difference` _elemsIcollectedSetNames+                    -- "Transform.ag"(line 363, column 8)+                    _elemsOallConstructors =+                        _elemsIcollectedConstructorsMap+                    -- "Transform.ag"(line 417, column 8)+                    _elemsOdefSets =+                        Map.fromList (map (\x->(x,(Set.singleton x, Set.empty))) (Set.toList _allNonterminals    ))+                    -- "Transform.ag"(line 418, column 8)+                    _elemsOdefinedSets =+                        Map.map fst _elemsIdefSets+                    -- "Transform.ag"(line 612, column 8)+                    _elemsOattrDecls =+                        Map.empty+                    -- "Transform.ag"(line 651, column 9)+                    _allAttrDecls =+                        if withSelf _lhsIoptions+                         then foldr addSelf _elemsIattrDecls (Set.toList _allNonterminals    )+                         else               _elemsIattrDecls+                    -- use rule "Transform.ag"(line 38, column 19)+                    _lhsOblocks =+                        _elemsIblocks+                    -- use rule "Transform.ag"(line 734, column 37)+                    _lhsOmoduleDecl =+                        _elemsImoduleDecl+                    -- use rule "Transform.ag"(line 499, column 34)+                    _lhsOpragmas =+                        _elemsIpragmas+                    -- copy rule (from local)+                    _elemsOallAttrDecls =+                        _allAttrDecls+                    -- copy rule (from local)+                    _elemsOallFields =+                        _allFields+                    -- copy rule (from local)+                    _elemsOallNonterminals =+                        _allNonterminals+                    ( _elemsIattrDecls,_elemsIattrOrderCollect,_elemsIblocks,_elemsIcollectedConstructorsMap,_elemsIcollectedFields,_elemsIcollectedInsts,_elemsIcollectedNames,_elemsIcollectedRules,_elemsIcollectedSetNames,_elemsIcollectedSigs,_elemsIdefSets,_elemsIderivings,_elemsIerrors,_elemsImoduleDecl,_elemsIorderDepErrorsCollect,_elemsIpragmas,_elemsIsemPragmasCollect,_elemsItypeSyns,_elemsIuseMap,_elemsIwrappers) =+                        (elems_ _elemsOallAttrDecls _elemsOallConstructors _elemsOallFields _elemsOallNonterminals _elemsOattrDecls _elemsOdefSets _elemsOdefinedSets)+                in  ( _lhsOblocks,_lhsOerrors,_lhsOmoduleDecl,_lhsOoutput,_lhsOpragmas))))+-- Alt ---------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allConstructors      : Map Nonterminal (Set Constructor)+         allNonterminals      : Set Nonterminal+         nts                  : Set Nonterminal+      synthesized attributes:+         collectedConstructorNames : Set Constructor+         collectedFields      : [(Nonterminal, Constructor, FieldMap)]+   alternatives:+      alternative Alt:+         child pos            : {Pos}+         child names          : ConstructorSet+         child fields         : {Fields}+-}+-- cata+sem_Alt :: Alt ->+           T_Alt+sem_Alt (Alt _pos _names _fields) =+    (sem_Alt_Alt _pos (sem_ConstructorSet _names) _fields)+-- semantic domain+newtype T_Alt = T_Alt ((Map Nonterminal (Set Constructor)) ->+                       (Set Nonterminal) ->+                       (Set Nonterminal) ->+                       ( (Set Constructor),([(Nonterminal, Constructor, FieldMap)])))+data Inh_Alt = Inh_Alt {allConstructors_Inh_Alt :: Map Nonterminal (Set Constructor),allNonterminals_Inh_Alt :: Set Nonterminal,nts_Inh_Alt :: Set Nonterminal}+data Syn_Alt = Syn_Alt {collectedConstructorNames_Syn_Alt :: Set Constructor,collectedFields_Syn_Alt :: [(Nonterminal, Constructor, FieldMap)]}+wrap_Alt (T_Alt sem) (Inh_Alt _lhsIallConstructors _lhsIallNonterminals _lhsInts) =+    (let ( _lhsOcollectedConstructorNames,_lhsOcollectedFields) =+             (sem _lhsIallConstructors _lhsIallNonterminals _lhsInts)+     in  (Syn_Alt _lhsOcollectedConstructorNames _lhsOcollectedFields))+sem_Alt_Alt :: Pos ->+               T_ConstructorSet ->+               Fields ->+               T_Alt+sem_Alt_Alt pos_ (T_ConstructorSet names_) fields_ =+    (T_Alt (\ _lhsIallConstructors+              _lhsIallNonterminals+              _lhsInts ->+                (let _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                     _lhsOcollectedConstructorNames :: (Set Constructor)+                     _namesIcollectedConstructorNames :: (Set Constructor)+                     _namesIconstructors :: ((Set Constructor->Set Constructor))+                     _namesIerrors :: (Seq Error)+                     -- "Transform.ag"(line 202, column 10)+                     _lhsOcollectedFields =+                         let fieldTable =+                              [ (attr, makeType _lhsIallNonterminals tp)+                              | (attr, tp) <- fields_+                              ]+                         in   [ (nt, con, fieldTable)+                              | nt  <- Set.toList _lhsInts+                              , con <- Set.toList (_namesIconstructors (Map.findWithDefault Set.empty nt _lhsIallConstructors))+                              ]+                     -- use rule "Transform.ag"(line 80, column 62)+                     _lhsOcollectedConstructorNames =+                         _namesIcollectedConstructorNames+                     ( _namesIcollectedConstructorNames,_namesIconstructors,_namesIerrors) =+                         (names_ )+                 in  ( _lhsOcollectedConstructorNames,_lhsOcollectedFields))))+-- Alts --------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allConstructors      : Map Nonterminal (Set Constructor)+         allNonterminals      : Set Nonterminal+         nts                  : Set Nonterminal+      synthesized attributes:+         collectedConstructorNames : Set Constructor+         collectedFields      : [(Nonterminal, Constructor, FieldMap)]+   alternatives:+      alternative Cons:+         child hd             : Alt+         child tl             : Alts+      alternative Nil:+-}+-- cata+sem_Alts :: Alts ->+            T_Alts+sem_Alts list =+    (Prelude.foldr sem_Alts_Cons sem_Alts_Nil (Prelude.map sem_Alt list))+-- semantic domain+newtype T_Alts = T_Alts ((Map Nonterminal (Set Constructor)) ->+                         (Set Nonterminal) ->+                         (Set Nonterminal) ->+                         ( (Set Constructor),([(Nonterminal, Constructor, FieldMap)])))+data Inh_Alts = Inh_Alts {allConstructors_Inh_Alts :: Map Nonterminal (Set Constructor),allNonterminals_Inh_Alts :: Set Nonterminal,nts_Inh_Alts :: Set Nonterminal}+data Syn_Alts = Syn_Alts {collectedConstructorNames_Syn_Alts :: Set Constructor,collectedFields_Syn_Alts :: [(Nonterminal, Constructor, FieldMap)]}+wrap_Alts (T_Alts sem) (Inh_Alts _lhsIallConstructors _lhsIallNonterminals _lhsInts) =+    (let ( _lhsOcollectedConstructorNames,_lhsOcollectedFields) =+             (sem _lhsIallConstructors _lhsIallNonterminals _lhsInts)+     in  (Syn_Alts _lhsOcollectedConstructorNames _lhsOcollectedFields))+sem_Alts_Cons :: T_Alt ->+                 T_Alts ->+                 T_Alts+sem_Alts_Cons (T_Alt hd_) (T_Alts tl_) =+    (T_Alts (\ _lhsIallConstructors+               _lhsIallNonterminals+               _lhsInts ->+                 (let _lhsOcollectedConstructorNames :: (Set Constructor)+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _hdOallConstructors :: (Map Nonterminal (Set Constructor))+                      _hdOallNonterminals :: (Set Nonterminal)+                      _hdOnts :: (Set Nonterminal)+                      _tlOallConstructors :: (Map Nonterminal (Set Constructor))+                      _tlOallNonterminals :: (Set Nonterminal)+                      _tlOnts :: (Set Nonterminal)+                      _hdIcollectedConstructorNames :: (Set Constructor)+                      _hdIcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _tlIcollectedConstructorNames :: (Set Constructor)+                      _tlIcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      -- use rule "Transform.ag"(line 80, column 62)+                      _lhsOcollectedConstructorNames =+                          _hdIcollectedConstructorNames `Set.union` _tlIcollectedConstructorNames+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          _hdIcollectedFields ++ _tlIcollectedFields+                      -- copy rule (down)+                      _hdOallConstructors =+                          _lhsIallConstructors+                      -- copy rule (down)+                      _hdOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _hdOnts =+                          _lhsInts+                      -- copy rule (down)+                      _tlOallConstructors =+                          _lhsIallConstructors+                      -- copy rule (down)+                      _tlOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _tlOnts =+                          _lhsInts+                      ( _hdIcollectedConstructorNames,_hdIcollectedFields) =+                          (hd_ _hdOallConstructors _hdOallNonterminals _hdOnts)+                      ( _tlIcollectedConstructorNames,_tlIcollectedFields) =+                          (tl_ _tlOallConstructors _tlOallNonterminals _tlOnts)+                  in  ( _lhsOcollectedConstructorNames,_lhsOcollectedFields))))+sem_Alts_Nil :: T_Alts+sem_Alts_Nil  =+    (T_Alts (\ _lhsIallConstructors+               _lhsIallNonterminals+               _lhsInts ->+                 (let _lhsOcollectedConstructorNames :: (Set Constructor)+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      -- use rule "Transform.ag"(line 80, column 62)+                      _lhsOcollectedConstructorNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                  in  ( _lhsOcollectedConstructorNames,_lhsOcollectedFields))))+-- Attrs -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allFields            : DataTypes+         allNonterminals      : Set Nonterminal+         nts                  : Set Nonterminal+      chained attribute:+         attrDecls            : Map Nonterminal (Attributes, Attributes)+      synthesized attributes:+         errors               : Seq Error+         useMap               : Map Nonterminal (Map Name (String,String,String))+   alternatives:+      alternative Attrs:+         child pos            : {Pos}+         child inh            : {AttrNames}+         child chn            : {AttrNames}+         child syn            : {AttrNames}+         visit 0:+            local _tup1       : _+            local attrDecls   : _+            local errors      : _+            local _tup2       : _+            local inherited   : _+            local synthesized : _+            local useMap      : _+-}+-- cata+sem_Attrs :: Attrs ->+             T_Attrs+sem_Attrs (Attrs _pos _inh _chn _syn) =+    (sem_Attrs_Attrs _pos _inh _chn _syn)+-- semantic domain+newtype T_Attrs = T_Attrs (DataTypes ->+                           (Set Nonterminal) ->+                           (Map Nonterminal (Attributes, Attributes)) ->+                           (Set Nonterminal) ->+                           ( (Map Nonterminal (Attributes, Attributes)),(Seq Error),(Map Nonterminal (Map Name (String,String,String)))))+data Inh_Attrs = Inh_Attrs {allFields_Inh_Attrs :: DataTypes,allNonterminals_Inh_Attrs :: Set Nonterminal,attrDecls_Inh_Attrs :: Map Nonterminal (Attributes, Attributes),nts_Inh_Attrs :: Set Nonterminal}+data Syn_Attrs = Syn_Attrs {attrDecls_Syn_Attrs :: Map Nonterminal (Attributes, Attributes),errors_Syn_Attrs :: Seq Error,useMap_Syn_Attrs :: Map Nonterminal (Map Name (String,String,String))}+wrap_Attrs (T_Attrs sem) (Inh_Attrs _lhsIallFields _lhsIallNonterminals _lhsIattrDecls _lhsInts) =+    (let ( _lhsOattrDecls,_lhsOerrors,_lhsOuseMap) =+             (sem _lhsIallFields _lhsIallNonterminals _lhsIattrDecls _lhsInts)+     in  (Syn_Attrs _lhsOattrDecls _lhsOerrors _lhsOuseMap))+sem_Attrs_Attrs :: Pos ->+                   AttrNames ->+                   AttrNames ->+                   AttrNames ->+                   T_Attrs+sem_Attrs_Attrs pos_ inh_ chn_ syn_ =+    (T_Attrs (\ _lhsIallFields+                _lhsIallNonterminals+                _lhsIattrDecls+                _lhsInts ->+                  (let _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                       _lhsOerrors :: (Seq Error)+                       _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                       -- "Transform.ag"(line 620, column 15)+                       __tup1 =+                           checkAttrs _lhsIallFields (Set.toList _lhsInts) _inherited _synthesized _lhsIattrDecls+                       -- "Transform.ag"(line 620, column 15)+                       (_attrDecls,_) =+                           __tup1+                       -- "Transform.ag"(line 620, column 15)+                       (_,_errors) =+                           __tup1+                       -- "Transform.ag"(line 622, column 15)+                       __tup2 =+                           let splitAttrs xs = unzip [ ((n,makeType _lhsIallNonterminals t),(n,ud))+                                                     | (n,t,ud) <- xs+                                                     ]+                               (inh,_)     = splitAttrs inh_+                               (chn,uses1) = splitAttrs chn_+                               (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 622, column 15)+                       (_inherited,_,_) =+                           __tup2+                       -- "Transform.ag"(line 622, column 15)+                       (_,_synthesized,_) =+                           __tup2+                       -- "Transform.ag"(line 622, column 15)+                       (_,_,_useMap) =+                           __tup2+                       -- "Transform.ag"(line 630, column 11)+                       _lhsOuseMap =+                           Map.fromList (zip (Set.toList _lhsInts) (repeat _useMap))+                       -- use rule "Transform.ag"(line 36, column 19)+                       _lhsOerrors =+                           _errors+                       -- copy rule (from local)+                       _lhsOattrDecls =+                           _attrDecls+                   in  ( _lhsOattrDecls,_lhsOerrors,_lhsOuseMap))))+-- ConstructorSet ----------------------------------------------+{-+   visit 0:+      synthesized attributes:+         collectedConstructorNames : Set Constructor+         constructors         : (Set Constructor->Set Constructor)+         errors               : Seq Error+   alternatives:+      alternative CAll:+      alternative CDifference:+         child set1           : ConstructorSet+         child set2           : ConstructorSet+      alternative CName:+         child name           : {Constructor}+      alternative CUnion:+         child set1           : ConstructorSet+         child set2           : ConstructorSet+-}+-- cata+sem_ConstructorSet :: ConstructorSet ->+                      T_ConstructorSet+sem_ConstructorSet (CAll ) =+    (sem_ConstructorSet_CAll )+sem_ConstructorSet (CDifference _set1 _set2) =+    (sem_ConstructorSet_CDifference (sem_ConstructorSet _set1) (sem_ConstructorSet _set2))+sem_ConstructorSet (CName _name) =+    (sem_ConstructorSet_CName _name)+sem_ConstructorSet (CUnion _set1 _set2) =+    (sem_ConstructorSet_CUnion (sem_ConstructorSet _set1) (sem_ConstructorSet _set2))+-- semantic domain+newtype T_ConstructorSet = T_ConstructorSet (( (Set Constructor),((Set Constructor->Set Constructor)),(Seq Error)))+data Inh_ConstructorSet = Inh_ConstructorSet {}+data Syn_ConstructorSet = Syn_ConstructorSet {collectedConstructorNames_Syn_ConstructorSet :: Set Constructor,constructors_Syn_ConstructorSet :: (Set Constructor->Set Constructor),errors_Syn_ConstructorSet :: Seq Error}+wrap_ConstructorSet (T_ConstructorSet sem) (Inh_ConstructorSet ) =+    (let ( _lhsOcollectedConstructorNames,_lhsOconstructors,_lhsOerrors) =+             (sem )+     in  (Syn_ConstructorSet _lhsOcollectedConstructorNames _lhsOconstructors _lhsOerrors))+sem_ConstructorSet_CAll :: T_ConstructorSet+sem_ConstructorSet_CAll  =+    (T_ConstructorSet (let _lhsOconstructors :: ((Set Constructor->Set Constructor))+                           _lhsOcollectedConstructorNames :: (Set Constructor)+                           _lhsOerrors :: (Seq Error)+                           -- "Transform.ag"(line 484, column 17)+                           _lhsOconstructors =+                               \ds -> ds+                           -- use rule "Transform.ag"(line 80, column 62)+                           _lhsOcollectedConstructorNames =+                               Set.empty+                           -- use rule "Transform.ag"(line 36, column 19)+                           _lhsOerrors =+                               Seq.empty+                       in  ( _lhsOcollectedConstructorNames,_lhsOconstructors,_lhsOerrors)))+sem_ConstructorSet_CDifference :: T_ConstructorSet ->+                                  T_ConstructorSet ->+                                  T_ConstructorSet+sem_ConstructorSet_CDifference (T_ConstructorSet set1_) (T_ConstructorSet set2_) =+    (T_ConstructorSet (let _lhsOconstructors :: ((Set Constructor->Set Constructor))+                           _lhsOcollectedConstructorNames :: (Set Constructor)+                           _lhsOerrors :: (Seq Error)+                           _set1IcollectedConstructorNames :: (Set Constructor)+                           _set1Iconstructors :: ((Set Constructor->Set Constructor))+                           _set1Ierrors :: (Seq Error)+                           _set2IcollectedConstructorNames :: (Set Constructor)+                           _set2Iconstructors :: ((Set Constructor->Set Constructor))+                           _set2Ierrors :: (Seq Error)+                           -- "Transform.ag"(line 483, column 17)+                           _lhsOconstructors =+                               \ds -> _set1Iconstructors ds `Set.difference` _set2Iconstructors ds+                           -- use rule "Transform.ag"(line 80, column 62)+                           _lhsOcollectedConstructorNames =+                               _set1IcollectedConstructorNames `Set.union` _set2IcollectedConstructorNames+                           -- use rule "Transform.ag"(line 36, column 19)+                           _lhsOerrors =+                               _set1Ierrors Seq.<> _set2Ierrors+                           ( _set1IcollectedConstructorNames,_set1Iconstructors,_set1Ierrors) =+                               (set1_ )+                           ( _set2IcollectedConstructorNames,_set2Iconstructors,_set2Ierrors) =+                               (set2_ )+                       in  ( _lhsOcollectedConstructorNames,_lhsOconstructors,_lhsOerrors)))+sem_ConstructorSet_CName :: Constructor ->+                            T_ConstructorSet+sem_ConstructorSet_CName name_ =+    (T_ConstructorSet (let _lhsOcollectedConstructorNames :: (Set Constructor)+                           _lhsOconstructors :: ((Set Constructor->Set Constructor))+                           _lhsOerrors :: (Seq Error)+                           -- "Transform.ag"(line 351, column 11)+                           _lhsOcollectedConstructorNames =+                               Set.singleton name_+                           -- "Transform.ag"(line 481, column 17)+                           _lhsOconstructors =+                               \ds -> Set.singleton name_+                           -- use rule "Transform.ag"(line 36, column 19)+                           _lhsOerrors =+                               Seq.empty+                       in  ( _lhsOcollectedConstructorNames,_lhsOconstructors,_lhsOerrors)))+sem_ConstructorSet_CUnion :: T_ConstructorSet ->+                             T_ConstructorSet ->+                             T_ConstructorSet+sem_ConstructorSet_CUnion (T_ConstructorSet set1_) (T_ConstructorSet set2_) =+    (T_ConstructorSet (let _lhsOconstructors :: ((Set Constructor->Set Constructor))+                           _lhsOcollectedConstructorNames :: (Set Constructor)+                           _lhsOerrors :: (Seq Error)+                           _set1IcollectedConstructorNames :: (Set Constructor)+                           _set1Iconstructors :: ((Set Constructor->Set Constructor))+                           _set1Ierrors :: (Seq Error)+                           _set2IcollectedConstructorNames :: (Set Constructor)+                           _set2Iconstructors :: ((Set Constructor->Set Constructor))+                           _set2Ierrors :: (Seq Error)+                           -- "Transform.ag"(line 482, column 17)+                           _lhsOconstructors =+                               \ds -> _set1Iconstructors ds `Set.union`      _set2Iconstructors ds+                           -- use rule "Transform.ag"(line 80, column 62)+                           _lhsOcollectedConstructorNames =+                               _set1IcollectedConstructorNames `Set.union` _set2IcollectedConstructorNames+                           -- use rule "Transform.ag"(line 36, column 19)+                           _lhsOerrors =+                               _set1Ierrors Seq.<> _set2Ierrors+                           ( _set1IcollectedConstructorNames,_set1Iconstructors,_set1Ierrors) =+                               (set1_ )+                           ( _set2IcollectedConstructorNames,_set2Iconstructors,_set2Ierrors) =+                               (set2_ )+                       in  ( _lhsOcollectedConstructorNames,_lhsOconstructors,_lhsOerrors)))+-- Elem --------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allAttrDecls         : Map Nonterminal (Attributes, Attributes)+         allConstructors      : Map Nonterminal (Set Constructor)+         allFields            : DataTypes+         allNonterminals      : Set Nonterminal+         definedSets          : DefinedSets+      chained attributes:+         attrDecls            : Map Nonterminal (Attributes, Attributes)+         defSets              : Map Name (Set Nonterminal,Set Name)+      synthesized attributes:+         attrOrderCollect     : AttrOrderMap+         blocks               : Blocks+         collectedConstructorsMap : Map Nonterminal (Set Constructor)+         collectedFields      : [(Nonterminal, Constructor, FieldMap)]+         collectedInsts       : [ (Nonterminal, Constructor, [Identifier]) ]+         collectedNames       : Set Name+         collectedRules       : [ (Nonterminal, Constructor, RuleInfo)]+         collectedSetNames    : Set Name+         collectedSigs        : [ (Nonterminal, Constructor, SigInfo) ]+         derivings            : Derivings+         errors               : Seq Error+         moduleDecl           : Maybe (String,String,String)+         orderDepErrorsCollect : Seq Error+         pragmas              : Options -> Options+         semPragmasCollect    : PragmaMap+         typeSyns             : TypeSyns+         useMap               : Map Nonterminal (Map Name (String,String,String))+         wrappers             : Set Nonterminal+   alternatives:+      alternative Attr:+         child pos            : {Pos}+         child names          : NontSet+         child attrs          : Attrs+      alternative Data:+         child pos            : {Pos}+         child names          : NontSet+         child attrs          : Attrs+         child alts           : Alts+         child ext            : {Bool}+      alternative Deriving:+         child pos            : {Pos}+         child set            : NontSet+         child classes        : {[Name]}+      alternative Module:+         child pos            : {Pos}+         child name           : {String}+         child exports        : {String}+         child imports        : {String}+      alternative Pragma:+         child pos            : {Pos}+         child names          : {[Name]}+      alternative Sem:+         child pos            : {Pos}+         child names          : NontSet+         child attrs          : Attrs+         child alts           : SemAlts+      alternative Set:+         child pos            : {Pos}+         child name           : {Name}+         child set            : NontSet+         visit 0:+            local _tup3       : _+            local defSets2    : _+            local errs        : _+      alternative Txt:+         child pos            : {Pos}+         child name           : {Name}+         child lines          : {[String]}+      alternative Type:+         child pos            : {Pos}+         child name           : {Nonterminal}+         child type           : {ComplexType}+         visit 0:+            local expanded    : _+            local argType     : _+      alternative Wrapper:+         child pos            : {Pos}+         child set            : NontSet+-}+-- cata+sem_Elem :: Elem ->+            T_Elem+sem_Elem (Attr _pos _names _attrs) =+    (sem_Elem_Attr _pos (sem_NontSet _names) (sem_Attrs _attrs))+sem_Elem (Data _pos _names _attrs _alts _ext) =+    (sem_Elem_Data _pos (sem_NontSet _names) (sem_Attrs _attrs) (sem_Alts _alts) _ext)+sem_Elem (Deriving _pos _set _classes) =+    (sem_Elem_Deriving _pos (sem_NontSet _set) _classes)+sem_Elem (Module _pos _name _exports _imports) =+    (sem_Elem_Module _pos _name _exports _imports)+sem_Elem (Pragma _pos _names) =+    (sem_Elem_Pragma _pos _names)+sem_Elem (Sem _pos _names _attrs _alts) =+    (sem_Elem_Sem _pos (sem_NontSet _names) (sem_Attrs _attrs) (sem_SemAlts _alts))+sem_Elem (Set _pos _name _set) =+    (sem_Elem_Set _pos _name (sem_NontSet _set))+sem_Elem (Txt _pos _name _lines) =+    (sem_Elem_Txt _pos _name _lines)+sem_Elem (Type _pos _name _type) =+    (sem_Elem_Type _pos _name _type)+sem_Elem (Wrapper _pos _set) =+    (sem_Elem_Wrapper _pos (sem_NontSet _set))+-- semantic domain+newtype T_Elem = T_Elem ((Map Nonterminal (Attributes, Attributes)) ->+                         (Map Nonterminal (Set Constructor)) ->+                         DataTypes ->+                         (Set Nonterminal) ->+                         (Map Nonterminal (Attributes, Attributes)) ->+                         (Map Name (Set Nonterminal,Set Name)) ->+                         DefinedSets ->+                         ( (Map Nonterminal (Attributes, Attributes)),AttrOrderMap,Blocks,(Map Nonterminal (Set Constructor)),([(Nonterminal, Constructor, FieldMap)]),([ (Nonterminal, Constructor, [Identifier]) ]),(Set Name),([ (Nonterminal, Constructor, RuleInfo)]),(Set Name),([ (Nonterminal, Constructor, SigInfo) ]),(Map Name (Set Nonterminal,Set Name)),Derivings,(Seq Error),(Maybe (String,String,String)),(Seq Error),(Options -> Options),PragmaMap,TypeSyns,(Map Nonterminal (Map Name (String,String,String))),(Set Nonterminal)))+data Inh_Elem = Inh_Elem {allAttrDecls_Inh_Elem :: Map Nonterminal (Attributes, Attributes),allConstructors_Inh_Elem :: Map Nonterminal (Set Constructor),allFields_Inh_Elem :: DataTypes,allNonterminals_Inh_Elem :: Set Nonterminal,attrDecls_Inh_Elem :: Map Nonterminal (Attributes, Attributes),defSets_Inh_Elem :: Map Name (Set Nonterminal,Set Name),definedSets_Inh_Elem :: DefinedSets}+data Syn_Elem = Syn_Elem {attrDecls_Syn_Elem :: Map Nonterminal (Attributes, Attributes),attrOrderCollect_Syn_Elem :: AttrOrderMap,blocks_Syn_Elem :: Blocks,collectedConstructorsMap_Syn_Elem :: Map Nonterminal (Set Constructor),collectedFields_Syn_Elem :: [(Nonterminal, Constructor, FieldMap)],collectedInsts_Syn_Elem :: [ (Nonterminal, Constructor, [Identifier]) ],collectedNames_Syn_Elem :: Set Name,collectedRules_Syn_Elem :: [ (Nonterminal, Constructor, RuleInfo)],collectedSetNames_Syn_Elem :: Set Name,collectedSigs_Syn_Elem :: [ (Nonterminal, Constructor, SigInfo) ],defSets_Syn_Elem :: Map Name (Set Nonterminal,Set Name),derivings_Syn_Elem :: Derivings,errors_Syn_Elem :: Seq Error,moduleDecl_Syn_Elem :: Maybe (String,String,String),orderDepErrorsCollect_Syn_Elem :: Seq Error,pragmas_Syn_Elem :: Options -> Options,semPragmasCollect_Syn_Elem :: PragmaMap,typeSyns_Syn_Elem :: TypeSyns,useMap_Syn_Elem :: Map Nonterminal (Map Name (String,String,String)),wrappers_Syn_Elem :: Set Nonterminal}+wrap_Elem (T_Elem sem) (Inh_Elem _lhsIallAttrDecls _lhsIallConstructors _lhsIallFields _lhsIallNonterminals _lhsIattrDecls _lhsIdefSets _lhsIdefinedSets) =+    (let ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers) =+             (sem _lhsIallAttrDecls _lhsIallConstructors _lhsIallFields _lhsIallNonterminals _lhsIattrDecls _lhsIdefSets _lhsIdefinedSets)+     in  (Syn_Elem _lhsOattrDecls _lhsOattrOrderCollect _lhsOblocks _lhsOcollectedConstructorsMap _lhsOcollectedFields _lhsOcollectedInsts _lhsOcollectedNames _lhsOcollectedRules _lhsOcollectedSetNames _lhsOcollectedSigs _lhsOdefSets _lhsOderivings _lhsOerrors _lhsOmoduleDecl _lhsOorderDepErrorsCollect _lhsOpragmas _lhsOsemPragmasCollect _lhsOtypeSyns _lhsOuseMap _lhsOwrappers))+sem_Elem_Attr :: Pos ->+                 T_NontSet ->+                 T_Attrs ->+                 T_Elem+sem_Elem_Attr pos_ (T_NontSet names_) (T_Attrs attrs_) =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _attrsOnts :: (Set Nonterminal)+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      _namesOallFields :: DataTypes+                      _namesOallNonterminals :: (Set Nonterminal)+                      _namesOdefinedSets :: DefinedSets+                      _attrsOallFields :: DataTypes+                      _attrsOallNonterminals :: (Set Nonterminal)+                      _attrsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _namesIcollectedNames :: (Set Name)+                      _namesIerrors :: (Seq Error)+                      _namesInontSet :: (Set Nonterminal)+                      _attrsIattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _attrsIerrors :: (Seq Error)+                      _attrsIuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      -- "Transform.ag"(line 616, column 10)+                      _attrsOnts =+                          _namesInontSet+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          _namesIcollectedNames+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          _namesIerrors Seq.<> _attrsIerrors+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          _attrsIuseMap+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (up)+                      _lhsOattrDecls =+                          _attrsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                      -- copy rule (down)+                      _namesOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _namesOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _namesOdefinedSets =+                          _lhsIdefinedSets+                      -- copy rule (down)+                      _attrsOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _attrsOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _attrsOattrDecls =+                          _lhsIattrDecls+                      ( _namesIcollectedNames,_namesIerrors,_namesInontSet) =+                          (names_ _namesOallFields _namesOallNonterminals _namesOdefinedSets)+                      ( _attrsIattrDecls,_attrsIerrors,_attrsIuseMap) =+                          (attrs_ _attrsOallFields _attrsOallNonterminals _attrsOattrDecls _attrsOnts)+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Data :: Pos ->+                 T_NontSet ->+                 T_Attrs ->+                 T_Alts ->+                 Bool ->+                 T_Elem+sem_Elem_Data pos_ (T_NontSet names_) (T_Attrs attrs_) (T_Alts alts_) ext_ =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _altsOnts :: (Set Nonterminal)+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _attrsOnts :: (Set Nonterminal)+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      _namesOallFields :: DataTypes+                      _namesOallNonterminals :: (Set Nonterminal)+                      _namesOdefinedSets :: DefinedSets+                      _attrsOallFields :: DataTypes+                      _attrsOallNonterminals :: (Set Nonterminal)+                      _attrsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _altsOallConstructors :: (Map Nonterminal (Set Constructor))+                      _altsOallNonterminals :: (Set Nonterminal)+                      _namesIcollectedNames :: (Set Name)+                      _namesIerrors :: (Seq Error)+                      _namesInontSet :: (Set Nonterminal)+                      _attrsIattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _attrsIerrors :: (Seq Error)+                      _attrsIuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _altsIcollectedConstructorNames :: (Set Constructor)+                      _altsIcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      -- "Transform.ag"(line 149, column 10)+                      _altsOnts =+                          _namesInontSet+                      -- "Transform.ag"(line 357, column 11)+                      _lhsOcollectedConstructorsMap =+                          Map.fromList+                          [ (n, _altsIcollectedConstructorNames)+                          | n <- Set.toList _namesInontSet+                          ]+                      -- "Transform.ag"(line 615, column 10)+                      _attrsOnts =+                          _namesInontSet+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          _altsIcollectedFields+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          _namesIcollectedNames+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          _namesIerrors Seq.<> _attrsIerrors+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          _attrsIuseMap+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (up)+                      _lhsOattrDecls =+                          _attrsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                      -- copy rule (down)+                      _namesOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _namesOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _namesOdefinedSets =+                          _lhsIdefinedSets+                      -- copy rule (down)+                      _attrsOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _attrsOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _attrsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (down)+                      _altsOallConstructors =+                          _lhsIallConstructors+                      -- copy rule (down)+                      _altsOallNonterminals =+                          _lhsIallNonterminals+                      ( _namesIcollectedNames,_namesIerrors,_namesInontSet) =+                          (names_ _namesOallFields _namesOallNonterminals _namesOdefinedSets)+                      ( _attrsIattrDecls,_attrsIerrors,_attrsIuseMap) =+                          (attrs_ _attrsOallFields _attrsOallNonterminals _attrsOattrDecls _attrsOnts)+                      ( _altsIcollectedConstructorNames,_altsIcollectedFields) =+                          (alts_ _altsOallConstructors _altsOallNonterminals _altsOnts)+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Deriving :: Pos ->+                     T_NontSet ->+                     ([Name]) ->+                     T_Elem+sem_Elem_Deriving pos_ (T_NontSet set_) classes_ =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _lhsOderivings :: Derivings+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      _setOallFields :: DataTypes+                      _setOallNonterminals :: (Set Nonterminal)+                      _setOdefinedSets :: DefinedSets+                      _setIcollectedNames :: (Set Name)+                      _setIerrors :: (Seq Error)+                      _setInontSet :: (Set Nonterminal)+                      -- "Transform.ag"(line 600, column 14)+                      _lhsOderivings =+                          Map.fromList [(nt,Set.fromList classes_) | nt <- Set.toList _setInontSet]+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          _setIcollectedNames+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          _setIerrors+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (chain)+                      _lhsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                      -- copy rule (down)+                      _setOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _setOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _setOdefinedSets =+                          _lhsIdefinedSets+                      ( _setIcollectedNames,_setIerrors,_setInontSet) =+                          (set_ _setOallFields _setOallNonterminals _setOdefinedSets)+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Module :: Pos ->+                   String ->+                   String ->+                   String ->+                   T_Elem+sem_Elem_Module pos_ name_ exports_ imports_ =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      -- "Transform.ag"(line 738, column 7)+                      _lhsOmoduleDecl =+                          Just (name_, exports_, imports_)+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          Seq.empty+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (chain)+                      _lhsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Pragma :: Pos ->+                   ([Name]) ->+                   T_Elem+sem_Elem_Pragma pos_ names_ =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _lhsOpragmas :: (Options -> Options)+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      -- "Transform.ag"(line 502, column 13)+                      _lhsOpragmas =+                          let mk n o = case getName n of+                                         "nocycle"      -> o { withCycle   = False }+                                         "cycle"        -> o { withCycle   = True  }+                                         "nostrictdata" -> o { strictData  = False }+                                         "strictdata"   -> o { strictData  = True  }+                                         "nostrictcase" -> o { strictCases = False }+                                         "strictcase"   -> o { strictCases = True  }+                                         "strictercase" -> o { strictCases = True, stricterCases = True }+                                         "nostrictwrap" -> o { strictWrap  = False }+                                         "strictwrap"   -> o { strictWrap  = True  }+                                         "novisit"      -> o { visit       = False }+                                         "visit"        -> o { visit       = True  }+                                         "nocase"       -> o { cases       = False }+                                         "case"         -> o { cases       = True  }+                                         "noseq"        -> o { withSeq     = False }+                                         "seq"          -> o { withSeq     = True  }+                                         "nounbox"      -> o { unbox       = False }+                                         "unbox"        -> o { unbox       = True  }+                                         "bangpats"     -> o { bangpats    = True  }+                                         "nooptimize"   -> o { cases = False , visit = False }+                                         "optimize"     -> o { cases = True  , visit = True  }+                                         "strictsem"    -> o { strictSems = True }+                                         "gentraces"    -> o { genTraces = True }+                                         "splitsems"    -> o { splitSems = True }+                                         "gencostcentres" -> o { genCostCentres = True }+                                         "sepsemmods"   -> o { sepSemMods = True }+                                         "genlinepragmas" -> o { genLinePragmas = True }+                                         _              -> o+                          in \o -> foldr mk o names_+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          Seq.empty+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (chain)+                      _lhsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Sem :: Pos ->+                T_NontSet ->+                T_Attrs ->+                T_SemAlts ->+                T_Elem+sem_Elem_Sem pos_ (T_NontSet names_) (T_Attrs attrs_) (T_SemAlts alts_) =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _altsOnts :: (Set Nonterminal)+                      _attrsOnts :: (Set Nonterminal)+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      _namesOallFields :: DataTypes+                      _namesOallNonterminals :: (Set Nonterminal)+                      _namesOdefinedSets :: DefinedSets+                      _attrsOallFields :: DataTypes+                      _attrsOallNonterminals :: (Set Nonterminal)+                      _attrsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _altsOallAttrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _altsOallFields :: DataTypes+                      _namesIcollectedNames :: (Set Name)+                      _namesIerrors :: (Seq Error)+                      _namesInontSet :: (Set Nonterminal)+                      _attrsIattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _attrsIerrors :: (Seq Error)+                      _attrsIuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _altsIattrOrderCollect :: AttrOrderMap+                      _altsIcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _altsIcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _altsIcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _altsIerrors :: (Seq Error)+                      _altsIorderDepErrorsCollect :: (Seq Error)+                      _altsIsemPragmasCollect :: PragmaMap+                      -- "Transform.ag"(line 150, column 10)+                      _altsOnts =+                          _namesInontSet+                      -- "Transform.ag"(line 617, column 10)+                      _attrsOnts =+                          _namesInontSet+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          _altsIattrOrderCollect+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          _altsIcollectedInsts+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          _namesIcollectedNames+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          _altsIcollectedRules+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          _altsIcollectedSigs+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          _namesIerrors Seq.<> _attrsIerrors Seq.<> _altsIerrors+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          _altsIorderDepErrorsCollect+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          _altsIsemPragmasCollect+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          _attrsIuseMap+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (up)+                      _lhsOattrDecls =+                          _attrsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                      -- copy rule (down)+                      _namesOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _namesOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _namesOdefinedSets =+                          _lhsIdefinedSets+                      -- copy rule (down)+                      _attrsOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _attrsOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _attrsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (down)+                      _altsOallAttrDecls =+                          _lhsIallAttrDecls+                      -- copy rule (down)+                      _altsOallFields =+                          _lhsIallFields+                      ( _namesIcollectedNames,_namesIerrors,_namesInontSet) =+                          (names_ _namesOallFields _namesOallNonterminals _namesOdefinedSets)+                      ( _attrsIattrDecls,_attrsIerrors,_attrsIuseMap) =+                          (attrs_ _attrsOallFields _attrsOallNonterminals _attrsOattrDecls _attrsOnts)+                      ( _altsIattrOrderCollect,_altsIcollectedInsts,_altsIcollectedRules,_altsIcollectedSigs,_altsIerrors,_altsIorderDepErrorsCollect,_altsIsemPragmasCollect) =+                          (alts_ _altsOallAttrDecls _altsOallFields _altsOnts)+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Set :: Pos ->+                Name ->+                T_NontSet ->+                T_Elem+sem_Elem_Set pos_ name_ (T_NontSet set_) =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _lhsOcollectedSetNames :: (Set Name)+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      _lhsOerrors :: (Seq Error)+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _setOallFields :: DataTypes+                      _setOallNonterminals :: (Set Nonterminal)+                      _setOdefinedSets :: DefinedSets+                      _setIcollectedNames :: (Set Name)+                      _setIerrors :: (Seq Error)+                      _setInontSet :: (Set Nonterminal)+                      -- "Transform.ag"(line 334, column 10)+                      _lhsOcollectedSetNames =+                          Set.singleton name_+                      -- "Transform.ag"(line 422, column 13)+                      __tup3 =+                          let allUsedNames = Set.unions [ maybe (Set.singleton n)+                                                                snd+                                                                (Map.lookup n _lhsIdefSets)+                                                        | n <- Set.toList _setIcollectedNames+                                                        ]+                              (nontSet,e1) | Set.member name_ allUsedNames+                                                       = (Set.empty, Seq.single(CyclicSet name_))+                                           | otherwise = (_setInontSet, Seq.empty)+                              (res, e2) = checkDuplicate DupSet  name_ (nontSet,Set.insert name_ allUsedNames) _lhsIdefSets+                          in (res, e1 Seq.<> e2)+                      -- "Transform.ag"(line 422, column 13)+                      (_defSets2,_) =+                          __tup3+                      -- "Transform.ag"(line 422, column 13)+                      (_,_errs) =+                          __tup3+                      -- "Transform.ag"(line 432, column 9)+                      _lhsOdefSets =+                          _defSets2+                      -- "Transform.ag"(line 432, column 9)+                      _lhsOerrors =+                          _errs <> _setIerrors+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          _setIcollectedNames+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (chain)+                      _lhsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (down)+                      _setOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _setOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _setOdefinedSets =+                          _lhsIdefinedSets+                      ( _setIcollectedNames,_setIerrors,_setInontSet) =+                          (set_ _setOallFields _setOallNonterminals _setOdefinedSets)+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Txt :: Pos ->+                Name ->+                ([String]) ->+                T_Elem+sem_Elem_Txt pos_ name_ lines_ =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _lhsOblocks :: Blocks+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      -- "Transform.ag"(line 159, column 11)+                      _lhsOblocks =+                          Map.singleton (getName name_) [(lines_, pos_)]+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          Seq.empty+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (chain)+                      _lhsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Type :: Pos ->+                 Nonterminal ->+                 ComplexType ->+                 T_Elem+sem_Elem_Type pos_ name_ type_ =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      -- "Transform.ag"(line 212, column 10)+                      _lhsOcollectedFields =+                          map (\(x,y)->(name_, x, y)) _expanded+                      -- "Transform.ag"(line 337, column 11)+                      _lhsOcollectedNames =+                          Set.singleton name_+                      -- "Transform.ag"(line 391, column 11)+                      _expanded =+                          case _argType of+                                  List tp -> [(Ident "Cons" pos_, [(Ident "hd" pos_, tp)+                                                                  ,(Ident "tl" pos_, NT name_)+                                                                  ]+                                              )+                                             ,(Ident "Nil" pos_,  [])+                                             ]+                                  Maybe tp -> [(Ident "Just" pos_, [(Ident "just" pos_, tp)+                                                                  ]+                                              )+                                             ,(Ident "Nothing" pos_,  [])+                                             ]+                                  Tuple xs -> [(Ident "Tuple" pos_, xs)]+                      -- "Transform.ag"(line 404, column 11)+                      _argType =+                          case type_ of+                           Maybe tp  -> Maybe  (  makeType _lhsIallNonterminals tp)+                           List tp   -> List   (  makeType _lhsIallNonterminals tp)+                           Tuple xs  -> Tuple [(f,makeType _lhsIallNonterminals tp) | (f,tp) <- xs]+                      -- "Transform.ag"(line 408, column 11)+                      _lhsOtypeSyns =+                          [(name_,_argType)]+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          Seq.empty+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 490, column 32)+                      _lhsOwrappers =+                          Set.empty+                      -- copy rule (chain)+                      _lhsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elem_Wrapper :: Pos ->+                    T_NontSet ->+                    T_Elem+sem_Elem_Wrapper pos_ (T_NontSet set_) =+    (T_Elem (\ _lhsIallAttrDecls+               _lhsIallConstructors+               _lhsIallFields+               _lhsIallNonterminals+               _lhsIattrDecls+               _lhsIdefSets+               _lhsIdefinedSets ->+                 (let _lhsOwrappers :: (Set Nonterminal)+                      _lhsOattrOrderCollect :: AttrOrderMap+                      _lhsOblocks :: Blocks+                      _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                      _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                      _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                      _lhsOcollectedNames :: (Set Name)+                      _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                      _lhsOcollectedSetNames :: (Set Name)+                      _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                      _lhsOderivings :: Derivings+                      _lhsOerrors :: (Seq Error)+                      _lhsOmoduleDecl :: (Maybe (String,String,String))+                      _lhsOorderDepErrorsCollect :: (Seq Error)+                      _lhsOpragmas :: (Options -> Options)+                      _lhsOsemPragmasCollect :: PragmaMap+                      _lhsOtypeSyns :: TypeSyns+                      _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                      _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                      _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                      _setOallFields :: DataTypes+                      _setOallNonterminals :: (Set Nonterminal)+                      _setOdefinedSets :: DefinedSets+                      _setIcollectedNames :: (Set Name)+                      _setIerrors :: (Seq Error)+                      _setInontSet :: (Set Nonterminal)+                      -- "Transform.ag"(line 493, column 13)+                      _lhsOwrappers =+                          _setInontSet+                      -- use rule "Transform.ag"(line 560, column 55)+                      _lhsOattrOrderCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 38, column 19)+                      _lhsOblocks =+                          Map.empty+                      -- use rule "Transform.ag"(line 81, column 48)+                      _lhsOcollectedConstructorsMap =+                          Map.empty+                      -- use rule "Transform.ag"(line 112, column 28)+                      _lhsOcollectedFields =+                          []+                      -- use rule "Transform.ag"(line 136, column 29)+                      _lhsOcollectedInsts =+                          []+                      -- use rule "Transform.ag"(line 73, column 50)+                      _lhsOcollectedNames =+                          _setIcollectedNames+                      -- use rule "Transform.ag"(line 134, column 29)+                      _lhsOcollectedRules =+                          []+                      -- use rule "Transform.ag"(line 72, column 50)+                      _lhsOcollectedSetNames =+                          Set.empty+                      -- use rule "Transform.ag"(line 135, column 29)+                      _lhsOcollectedSigs =+                          []+                      -- use rule "Transform.ag"(line 593, column 33)+                      _lhsOderivings =+                          Map.empty+                      -- use rule "Transform.ag"(line 36, column 19)+                      _lhsOerrors =+                          _setIerrors+                      -- use rule "Transform.ag"(line 734, column 37)+                      _lhsOmoduleDecl =+                          mzero+                      -- use rule "Transform.ag"(line 561, column 60)+                      _lhsOorderDepErrorsCollect =+                          Seq.empty+                      -- use rule "Transform.ag"(line 499, column 34)+                      _lhsOpragmas =+                          id+                      -- use rule "Transform.ag"(line 532, column 56)+                      _lhsOsemPragmasCollect =+                          Map.empty+                      -- use rule "Transform.ag"(line 378, column 32)+                      _lhsOtypeSyns =+                          []+                      -- use rule "Transform.ag"(line 124, column 15)+                      _lhsOuseMap =+                          Map.empty+                      -- copy rule (chain)+                      _lhsOattrDecls =+                          _lhsIattrDecls+                      -- copy rule (chain)+                      _lhsOdefSets =+                          _lhsIdefSets+                      -- copy rule (down)+                      _setOallFields =+                          _lhsIallFields+                      -- copy rule (down)+                      _setOallNonterminals =+                          _lhsIallNonterminals+                      -- copy rule (down)+                      _setOdefinedSets =+                          _lhsIdefinedSets+                      ( _setIcollectedNames,_setIerrors,_setInontSet) =+                          (set_ _setOallFields _setOallNonterminals _setOdefinedSets)+                  in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+-- Elems -------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allAttrDecls         : Map Nonterminal (Attributes, Attributes)+         allConstructors      : Map Nonterminal (Set Constructor)+         allFields            : DataTypes+         allNonterminals      : Set Nonterminal+         definedSets          : DefinedSets+      chained attributes:+         attrDecls            : Map Nonterminal (Attributes, Attributes)+         defSets              : Map Name (Set Nonterminal,Set Name)+      synthesized attributes:+         attrOrderCollect     : AttrOrderMap+         blocks               : Blocks+         collectedConstructorsMap : Map Nonterminal (Set Constructor)+         collectedFields      : [(Nonterminal, Constructor, FieldMap)]+         collectedInsts       : [ (Nonterminal, Constructor, [Identifier]) ]+         collectedNames       : Set Name+         collectedRules       : [ (Nonterminal, Constructor, RuleInfo)]+         collectedSetNames    : Set Name+         collectedSigs        : [ (Nonterminal, Constructor, SigInfo) ]+         derivings            : Derivings+         errors               : Seq Error+         moduleDecl           : Maybe (String,String,String)+         orderDepErrorsCollect : Seq Error+         pragmas              : Options -> Options+         semPragmasCollect    : PragmaMap+         typeSyns             : TypeSyns+         useMap               : Map Nonterminal (Map Name (String,String,String))+         wrappers             : Set Nonterminal+   alternatives:+      alternative Cons:+         child hd             : Elem+         child tl             : Elems+      alternative Nil:+-}+-- cata+sem_Elems :: Elems ->+             T_Elems+sem_Elems list =+    (Prelude.foldr sem_Elems_Cons sem_Elems_Nil (Prelude.map sem_Elem list))+-- semantic domain+newtype T_Elems = T_Elems ((Map Nonterminal (Attributes, Attributes)) ->+                           (Map Nonterminal (Set Constructor)) ->+                           DataTypes ->+                           (Set Nonterminal) ->+                           (Map Nonterminal (Attributes, Attributes)) ->+                           (Map Name (Set Nonterminal,Set Name)) ->+                           DefinedSets ->+                           ( (Map Nonterminal (Attributes, Attributes)),AttrOrderMap,Blocks,(Map Nonterminal (Set Constructor)),([(Nonterminal, Constructor, FieldMap)]),([ (Nonterminal, Constructor, [Identifier]) ]),(Set Name),([ (Nonterminal, Constructor, RuleInfo)]),(Set Name),([ (Nonterminal, Constructor, SigInfo) ]),(Map Name (Set Nonterminal,Set Name)),Derivings,(Seq Error),(Maybe (String,String,String)),(Seq Error),(Options -> Options),PragmaMap,TypeSyns,(Map Nonterminal (Map Name (String,String,String))),(Set Nonterminal)))+data Inh_Elems = Inh_Elems {allAttrDecls_Inh_Elems :: Map Nonterminal (Attributes, Attributes),allConstructors_Inh_Elems :: Map Nonterminal (Set Constructor),allFields_Inh_Elems :: DataTypes,allNonterminals_Inh_Elems :: Set Nonterminal,attrDecls_Inh_Elems :: Map Nonterminal (Attributes, Attributes),defSets_Inh_Elems :: Map Name (Set Nonterminal,Set Name),definedSets_Inh_Elems :: DefinedSets}+data Syn_Elems = Syn_Elems {attrDecls_Syn_Elems :: Map Nonterminal (Attributes, Attributes),attrOrderCollect_Syn_Elems :: AttrOrderMap,blocks_Syn_Elems :: Blocks,collectedConstructorsMap_Syn_Elems :: Map Nonterminal (Set Constructor),collectedFields_Syn_Elems :: [(Nonterminal, Constructor, FieldMap)],collectedInsts_Syn_Elems :: [ (Nonterminal, Constructor, [Identifier]) ],collectedNames_Syn_Elems :: Set Name,collectedRules_Syn_Elems :: [ (Nonterminal, Constructor, RuleInfo)],collectedSetNames_Syn_Elems :: Set Name,collectedSigs_Syn_Elems :: [ (Nonterminal, Constructor, SigInfo) ],defSets_Syn_Elems :: Map Name (Set Nonterminal,Set Name),derivings_Syn_Elems :: Derivings,errors_Syn_Elems :: Seq Error,moduleDecl_Syn_Elems :: Maybe (String,String,String),orderDepErrorsCollect_Syn_Elems :: Seq Error,pragmas_Syn_Elems :: Options -> Options,semPragmasCollect_Syn_Elems :: PragmaMap,typeSyns_Syn_Elems :: TypeSyns,useMap_Syn_Elems :: Map Nonterminal (Map Name (String,String,String)),wrappers_Syn_Elems :: Set Nonterminal}+wrap_Elems (T_Elems sem) (Inh_Elems _lhsIallAttrDecls _lhsIallConstructors _lhsIallFields _lhsIallNonterminals _lhsIattrDecls _lhsIdefSets _lhsIdefinedSets) =+    (let ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers) =+             (sem _lhsIallAttrDecls _lhsIallConstructors _lhsIallFields _lhsIallNonterminals _lhsIattrDecls _lhsIdefSets _lhsIdefinedSets)+     in  (Syn_Elems _lhsOattrDecls _lhsOattrOrderCollect _lhsOblocks _lhsOcollectedConstructorsMap _lhsOcollectedFields _lhsOcollectedInsts _lhsOcollectedNames _lhsOcollectedRules _lhsOcollectedSetNames _lhsOcollectedSigs _lhsOdefSets _lhsOderivings _lhsOerrors _lhsOmoduleDecl _lhsOorderDepErrorsCollect _lhsOpragmas _lhsOsemPragmasCollect _lhsOtypeSyns _lhsOuseMap _lhsOwrappers))+sem_Elems_Cons :: T_Elem ->+                  T_Elems ->+                  T_Elems+sem_Elems_Cons (T_Elem hd_) (T_Elems tl_) =+    (T_Elems (\ _lhsIallAttrDecls+                _lhsIallConstructors+                _lhsIallFields+                _lhsIallNonterminals+                _lhsIattrDecls+                _lhsIdefSets+                _lhsIdefinedSets ->+                  (let _lhsOattrOrderCollect :: AttrOrderMap+                       _lhsOblocks :: Blocks+                       _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                       _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                       _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                       _lhsOcollectedNames :: (Set Name)+                       _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                       _lhsOcollectedSetNames :: (Set Name)+                       _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                       _lhsOderivings :: Derivings+                       _lhsOerrors :: (Seq Error)+                       _lhsOmoduleDecl :: (Maybe (String,String,String))+                       _lhsOorderDepErrorsCollect :: (Seq Error)+                       _lhsOpragmas :: (Options -> Options)+                       _lhsOsemPragmasCollect :: PragmaMap+                       _lhsOtypeSyns :: TypeSyns+                       _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                       _lhsOwrappers :: (Set Nonterminal)+                       _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                       _hdOallAttrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _hdOallConstructors :: (Map Nonterminal (Set Constructor))+                       _hdOallFields :: DataTypes+                       _hdOallNonterminals :: (Set Nonterminal)+                       _hdOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _hdOdefSets :: (Map Name (Set Nonterminal,Set Name))+                       _hdOdefinedSets :: DefinedSets+                       _tlOallAttrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _tlOallConstructors :: (Map Nonterminal (Set Constructor))+                       _tlOallFields :: DataTypes+                       _tlOallNonterminals :: (Set Nonterminal)+                       _tlOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _tlOdefSets :: (Map Name (Set Nonterminal,Set Name))+                       _tlOdefinedSets :: DefinedSets+                       _hdIattrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _hdIattrOrderCollect :: AttrOrderMap+                       _hdIblocks :: Blocks+                       _hdIcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                       _hdIcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                       _hdIcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                       _hdIcollectedNames :: (Set Name)+                       _hdIcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                       _hdIcollectedSetNames :: (Set Name)+                       _hdIcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                       _hdIdefSets :: (Map Name (Set Nonterminal,Set Name))+                       _hdIderivings :: Derivings+                       _hdIerrors :: (Seq Error)+                       _hdImoduleDecl :: (Maybe (String,String,String))+                       _hdIorderDepErrorsCollect :: (Seq Error)+                       _hdIpragmas :: (Options -> Options)+                       _hdIsemPragmasCollect :: PragmaMap+                       _hdItypeSyns :: TypeSyns+                       _hdIuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                       _hdIwrappers :: (Set Nonterminal)+                       _tlIattrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _tlIattrOrderCollect :: AttrOrderMap+                       _tlIblocks :: Blocks+                       _tlIcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                       _tlIcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                       _tlIcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                       _tlIcollectedNames :: (Set Name)+                       _tlIcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                       _tlIcollectedSetNames :: (Set Name)+                       _tlIcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                       _tlIdefSets :: (Map Name (Set Nonterminal,Set Name))+                       _tlIderivings :: Derivings+                       _tlIerrors :: (Seq Error)+                       _tlImoduleDecl :: (Maybe (String,String,String))+                       _tlIorderDepErrorsCollect :: (Seq Error)+                       _tlIpragmas :: (Options -> Options)+                       _tlIsemPragmasCollect :: PragmaMap+                       _tlItypeSyns :: TypeSyns+                       _tlIuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                       _tlIwrappers :: (Set Nonterminal)+                       -- use rule "Transform.ag"(line 560, column 55)+                       _lhsOattrOrderCollect =+                           _hdIattrOrderCollect `orderMapUnion` _tlIattrOrderCollect+                       -- use rule "Transform.ag"(line 38, column 19)+                       _lhsOblocks =+                           _hdIblocks `mapUnionWithPlusPlus` _tlIblocks+                       -- use rule "Transform.ag"(line 81, column 48)+                       _lhsOcollectedConstructorsMap =+                           _hdIcollectedConstructorsMap `mapUnionWithSetUnion` _tlIcollectedConstructorsMap+                       -- use rule "Transform.ag"(line 112, column 28)+                       _lhsOcollectedFields =+                           _hdIcollectedFields ++ _tlIcollectedFields+                       -- use rule "Transform.ag"(line 136, column 29)+                       _lhsOcollectedInsts =+                           _hdIcollectedInsts ++ _tlIcollectedInsts+                       -- use rule "Transform.ag"(line 73, column 50)+                       _lhsOcollectedNames =+                           _hdIcollectedNames `Set.union` _tlIcollectedNames+                       -- use rule "Transform.ag"(line 134, column 29)+                       _lhsOcollectedRules =+                           _hdIcollectedRules ++ _tlIcollectedRules+                       -- use rule "Transform.ag"(line 72, column 50)+                       _lhsOcollectedSetNames =+                           _hdIcollectedSetNames `Set.union` _tlIcollectedSetNames+                       -- use rule "Transform.ag"(line 135, column 29)+                       _lhsOcollectedSigs =+                           _hdIcollectedSigs ++ _tlIcollectedSigs+                       -- use rule "Transform.ag"(line 593, column 33)+                       _lhsOderivings =+                           _hdIderivings `mergeDerivings` _tlIderivings+                       -- use rule "Transform.ag"(line 36, column 19)+                       _lhsOerrors =+                           _hdIerrors Seq.<> _tlIerrors+                       -- use rule "Transform.ag"(line 734, column 37)+                       _lhsOmoduleDecl =+                           _hdImoduleDecl `mplus` _tlImoduleDecl+                       -- use rule "Transform.ag"(line 561, column 60)+                       _lhsOorderDepErrorsCollect =+                           _hdIorderDepErrorsCollect Seq.<> _tlIorderDepErrorsCollect+                       -- use rule "Transform.ag"(line 499, column 34)+                       _lhsOpragmas =+                           _hdIpragmas . _tlIpragmas+                       -- use rule "Transform.ag"(line 532, column 56)+                       _lhsOsemPragmasCollect =+                           _hdIsemPragmasCollect `pragmaMapUnion` _tlIsemPragmasCollect+                       -- use rule "Transform.ag"(line 378, column 32)+                       _lhsOtypeSyns =+                           _hdItypeSyns ++ _tlItypeSyns+                       -- use rule "Transform.ag"(line 124, column 15)+                       _lhsOuseMap =+                           _hdIuseMap `merge` _tlIuseMap+                       -- use rule "Transform.ag"(line 490, column 32)+                       _lhsOwrappers =+                           _hdIwrappers `Set.union` _tlIwrappers+                       -- copy rule (up)+                       _lhsOattrDecls =+                           _tlIattrDecls+                       -- copy rule (up)+                       _lhsOdefSets =+                           _tlIdefSets+                       -- copy rule (down)+                       _hdOallAttrDecls =+                           _lhsIallAttrDecls+                       -- copy rule (down)+                       _hdOallConstructors =+                           _lhsIallConstructors+                       -- copy rule (down)+                       _hdOallFields =+                           _lhsIallFields+                       -- copy rule (down)+                       _hdOallNonterminals =+                           _lhsIallNonterminals+                       -- copy rule (down)+                       _hdOattrDecls =+                           _lhsIattrDecls+                       -- copy rule (down)+                       _hdOdefSets =+                           _lhsIdefSets+                       -- copy rule (down)+                       _hdOdefinedSets =+                           _lhsIdefinedSets+                       -- copy rule (down)+                       _tlOallAttrDecls =+                           _lhsIallAttrDecls+                       -- copy rule (down)+                       _tlOallConstructors =+                           _lhsIallConstructors+                       -- copy rule (down)+                       _tlOallFields =+                           _lhsIallFields+                       -- copy rule (down)+                       _tlOallNonterminals =+                           _lhsIallNonterminals+                       -- copy rule (chain)+                       _tlOattrDecls =+                           _hdIattrDecls+                       -- copy rule (chain)+                       _tlOdefSets =+                           _hdIdefSets+                       -- copy rule (down)+                       _tlOdefinedSets =+                           _lhsIdefinedSets+                       ( _hdIattrDecls,_hdIattrOrderCollect,_hdIblocks,_hdIcollectedConstructorsMap,_hdIcollectedFields,_hdIcollectedInsts,_hdIcollectedNames,_hdIcollectedRules,_hdIcollectedSetNames,_hdIcollectedSigs,_hdIdefSets,_hdIderivings,_hdIerrors,_hdImoduleDecl,_hdIorderDepErrorsCollect,_hdIpragmas,_hdIsemPragmasCollect,_hdItypeSyns,_hdIuseMap,_hdIwrappers) =+                           (hd_ _hdOallAttrDecls _hdOallConstructors _hdOallFields _hdOallNonterminals _hdOattrDecls _hdOdefSets _hdOdefinedSets)+                       ( _tlIattrDecls,_tlIattrOrderCollect,_tlIblocks,_tlIcollectedConstructorsMap,_tlIcollectedFields,_tlIcollectedInsts,_tlIcollectedNames,_tlIcollectedRules,_tlIcollectedSetNames,_tlIcollectedSigs,_tlIdefSets,_tlIderivings,_tlIerrors,_tlImoduleDecl,_tlIorderDepErrorsCollect,_tlIpragmas,_tlIsemPragmasCollect,_tlItypeSyns,_tlIuseMap,_tlIwrappers) =+                           (tl_ _tlOallAttrDecls _tlOallConstructors _tlOallFields _tlOallNonterminals _tlOattrDecls _tlOdefSets _tlOdefinedSets)+                   in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+sem_Elems_Nil :: T_Elems+sem_Elems_Nil  =+    (T_Elems (\ _lhsIallAttrDecls+                _lhsIallConstructors+                _lhsIallFields+                _lhsIallNonterminals+                _lhsIattrDecls+                _lhsIdefSets+                _lhsIdefinedSets ->+                  (let _lhsOattrOrderCollect :: AttrOrderMap+                       _lhsOblocks :: Blocks+                       _lhsOcollectedConstructorsMap :: (Map Nonterminal (Set Constructor))+                       _lhsOcollectedFields :: ([(Nonterminal, Constructor, FieldMap)])+                       _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                       _lhsOcollectedNames :: (Set Name)+                       _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                       _lhsOcollectedSetNames :: (Set Name)+                       _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                       _lhsOderivings :: Derivings+                       _lhsOerrors :: (Seq Error)+                       _lhsOmoduleDecl :: (Maybe (String,String,String))+                       _lhsOorderDepErrorsCollect :: (Seq Error)+                       _lhsOpragmas :: (Options -> Options)+                       _lhsOsemPragmasCollect :: PragmaMap+                       _lhsOtypeSyns :: TypeSyns+                       _lhsOuseMap :: (Map Nonterminal (Map Name (String,String,String)))+                       _lhsOwrappers :: (Set Nonterminal)+                       _lhsOattrDecls :: (Map Nonterminal (Attributes, Attributes))+                       _lhsOdefSets :: (Map Name (Set Nonterminal,Set Name))+                       -- use rule "Transform.ag"(line 560, column 55)+                       _lhsOattrOrderCollect =+                           Map.empty+                       -- use rule "Transform.ag"(line 38, column 19)+                       _lhsOblocks =+                           Map.empty+                       -- use rule "Transform.ag"(line 81, column 48)+                       _lhsOcollectedConstructorsMap =+                           Map.empty+                       -- use rule "Transform.ag"(line 112, column 28)+                       _lhsOcollectedFields =+                           []+                       -- use rule "Transform.ag"(line 136, column 29)+                       _lhsOcollectedInsts =+                           []+                       -- use rule "Transform.ag"(line 73, column 50)+                       _lhsOcollectedNames =+                           Set.empty+                       -- use rule "Transform.ag"(line 134, column 29)+                       _lhsOcollectedRules =+                           []+                       -- use rule "Transform.ag"(line 72, column 50)+                       _lhsOcollectedSetNames =+                           Set.empty+                       -- use rule "Transform.ag"(line 135, column 29)+                       _lhsOcollectedSigs =+                           []+                       -- use rule "Transform.ag"(line 593, column 33)+                       _lhsOderivings =+                           Map.empty+                       -- use rule "Transform.ag"(line 36, column 19)+                       _lhsOerrors =+                           Seq.empty+                       -- use rule "Transform.ag"(line 734, column 37)+                       _lhsOmoduleDecl =+                           mzero+                       -- use rule "Transform.ag"(line 561, column 60)+                       _lhsOorderDepErrorsCollect =+                           Seq.empty+                       -- use rule "Transform.ag"(line 499, column 34)+                       _lhsOpragmas =+                           id+                       -- use rule "Transform.ag"(line 532, column 56)+                       _lhsOsemPragmasCollect =+                           Map.empty+                       -- use rule "Transform.ag"(line 378, column 32)+                       _lhsOtypeSyns =+                           []+                       -- use rule "Transform.ag"(line 124, column 15)+                       _lhsOuseMap =+                           Map.empty+                       -- use rule "Transform.ag"(line 490, column 32)+                       _lhsOwrappers =+                           Set.empty+                       -- copy rule (chain)+                       _lhsOattrDecls =+                           _lhsIattrDecls+                       -- copy rule (chain)+                       _lhsOdefSets =+                           _lhsIdefSets+                   in  ( _lhsOattrDecls,_lhsOattrOrderCollect,_lhsOblocks,_lhsOcollectedConstructorsMap,_lhsOcollectedFields,_lhsOcollectedInsts,_lhsOcollectedNames,_lhsOcollectedRules,_lhsOcollectedSetNames,_lhsOcollectedSigs,_lhsOdefSets,_lhsOderivings,_lhsOerrors,_lhsOmoduleDecl,_lhsOorderDepErrorsCollect,_lhsOpragmas,_lhsOsemPragmasCollect,_lhsOtypeSyns,_lhsOuseMap,_lhsOwrappers))))+-- NontSet -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allFields            : DataTypes+         allNonterminals      : Set Nonterminal+         definedSets          : DefinedSets+      synthesized attributes:+         collectedNames       : Set Name+         errors               : Seq Error+         nontSet              : Set Nonterminal+   alternatives:+      alternative All:+      alternative Difference:+         child set1           : NontSet+         child set2           : NontSet+      alternative Intersect:+         child set1           : NontSet+         child set2           : NontSet+      alternative NamedSet:+         child name           : {Nonterminal}+         visit 0:+            local _tup4       : _+            local nontSet     : _+            local errors      : _+      alternative Path:+         child from           : {Nonterminal}+         child to             : {Nonterminal}+      alternative Union:+         child set1           : NontSet+         child set2           : NontSet+-}+-- cata+sem_NontSet :: NontSet ->+               T_NontSet+sem_NontSet (All ) =+    (sem_NontSet_All )+sem_NontSet (Difference _set1 _set2) =+    (sem_NontSet_Difference (sem_NontSet _set1) (sem_NontSet _set2))+sem_NontSet (Intersect _set1 _set2) =+    (sem_NontSet_Intersect (sem_NontSet _set1) (sem_NontSet _set2))+sem_NontSet (NamedSet _name) =+    (sem_NontSet_NamedSet _name)+sem_NontSet (Path _from _to) =+    (sem_NontSet_Path _from _to)+sem_NontSet (Union _set1 _set2) =+    (sem_NontSet_Union (sem_NontSet _set1) (sem_NontSet _set2))+-- semantic domain+newtype T_NontSet = T_NontSet (DataTypes ->+                               (Set Nonterminal) ->+                               DefinedSets ->+                               ( (Set Name),(Seq Error),(Set Nonterminal)))+data Inh_NontSet = Inh_NontSet {allFields_Inh_NontSet :: DataTypes,allNonterminals_Inh_NontSet :: Set Nonterminal,definedSets_Inh_NontSet :: DefinedSets}+data Syn_NontSet = Syn_NontSet {collectedNames_Syn_NontSet :: Set Name,errors_Syn_NontSet :: Seq Error,nontSet_Syn_NontSet :: Set Nonterminal}+wrap_NontSet (T_NontSet sem) (Inh_NontSet _lhsIallFields _lhsIallNonterminals _lhsIdefinedSets) =+    (let ( _lhsOcollectedNames,_lhsOerrors,_lhsOnontSet) =+             (sem _lhsIallFields _lhsIallNonterminals _lhsIdefinedSets)+     in  (Syn_NontSet _lhsOcollectedNames _lhsOerrors _lhsOnontSet))+sem_NontSet_All :: T_NontSet+sem_NontSet_All  =+    (T_NontSet (\ _lhsIallFields+                  _lhsIallNonterminals+                  _lhsIdefinedSets ->+                    (let _lhsOnontSet :: (Set Nonterminal)+                         _lhsOcollectedNames :: (Set Name)+                         _lhsOerrors :: (Seq Error)+                         -- "Transform.ag"(line 436, column 16)+                         _lhsOnontSet =+                             _lhsIallNonterminals+                         -- use rule "Transform.ag"(line 73, column 50)+                         _lhsOcollectedNames =+                             Set.empty+                         -- use rule "Transform.ag"(line 36, column 19)+                         _lhsOerrors =+                             Seq.empty+                     in  ( _lhsOcollectedNames,_lhsOerrors,_lhsOnontSet))))+sem_NontSet_Difference :: T_NontSet ->+                          T_NontSet ->+                          T_NontSet+sem_NontSet_Difference (T_NontSet set1_) (T_NontSet set2_) =+    (T_NontSet (\ _lhsIallFields+                  _lhsIallNonterminals+                  _lhsIdefinedSets ->+                    (let _lhsOnontSet :: (Set Nonterminal)+                         _lhsOcollectedNames :: (Set Name)+                         _lhsOerrors :: (Seq Error)+                         _set1OallFields :: DataTypes+                         _set1OallNonterminals :: (Set Nonterminal)+                         _set1OdefinedSets :: DefinedSets+                         _set2OallFields :: DataTypes+                         _set2OallNonterminals :: (Set Nonterminal)+                         _set2OdefinedSets :: DefinedSets+                         _set1IcollectedNames :: (Set Name)+                         _set1Ierrors :: (Seq Error)+                         _set1InontSet :: (Set Nonterminal)+                         _set2IcollectedNames :: (Set Name)+                         _set2Ierrors :: (Seq Error)+                         _set2InontSet :: (Set Nonterminal)+                         -- "Transform.ag"(line 442, column 16)+                         _lhsOnontSet =+                             Set.difference    _set1InontSet _set2InontSet+                         -- use rule "Transform.ag"(line 73, column 50)+                         _lhsOcollectedNames =+                             _set1IcollectedNames `Set.union` _set2IcollectedNames+                         -- use rule "Transform.ag"(line 36, column 19)+                         _lhsOerrors =+                             _set1Ierrors Seq.<> _set2Ierrors+                         -- copy rule (down)+                         _set1OallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _set1OallNonterminals =+                             _lhsIallNonterminals+                         -- copy rule (down)+                         _set1OdefinedSets =+                             _lhsIdefinedSets+                         -- copy rule (down)+                         _set2OallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _set2OallNonterminals =+                             _lhsIallNonterminals+                         -- copy rule (down)+                         _set2OdefinedSets =+                             _lhsIdefinedSets+                         ( _set1IcollectedNames,_set1Ierrors,_set1InontSet) =+                             (set1_ _set1OallFields _set1OallNonterminals _set1OdefinedSets)+                         ( _set2IcollectedNames,_set2Ierrors,_set2InontSet) =+                             (set2_ _set2OallFields _set2OallNonterminals _set2OdefinedSets)+                     in  ( _lhsOcollectedNames,_lhsOerrors,_lhsOnontSet))))+sem_NontSet_Intersect :: T_NontSet ->+                         T_NontSet ->+                         T_NontSet+sem_NontSet_Intersect (T_NontSet set1_) (T_NontSet set2_) =+    (T_NontSet (\ _lhsIallFields+                  _lhsIallNonterminals+                  _lhsIdefinedSets ->+                    (let _lhsOnontSet :: (Set Nonterminal)+                         _lhsOcollectedNames :: (Set Name)+                         _lhsOerrors :: (Seq Error)+                         _set1OallFields :: DataTypes+                         _set1OallNonterminals :: (Set Nonterminal)+                         _set1OdefinedSets :: DefinedSets+                         _set2OallFields :: DataTypes+                         _set2OallNonterminals :: (Set Nonterminal)+                         _set2OdefinedSets :: DefinedSets+                         _set1IcollectedNames :: (Set Name)+                         _set1Ierrors :: (Seq Error)+                         _set1InontSet :: (Set Nonterminal)+                         _set2IcollectedNames :: (Set Name)+                         _set2Ierrors :: (Seq Error)+                         _set2InontSet :: (Set Nonterminal)+                         -- "Transform.ag"(line 441, column 16)+                         _lhsOnontSet =+                             Set.intersection  _set1InontSet _set2InontSet+                         -- use rule "Transform.ag"(line 73, column 50)+                         _lhsOcollectedNames =+                             _set1IcollectedNames `Set.union` _set2IcollectedNames+                         -- use rule "Transform.ag"(line 36, column 19)+                         _lhsOerrors =+                             _set1Ierrors Seq.<> _set2Ierrors+                         -- copy rule (down)+                         _set1OallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _set1OallNonterminals =+                             _lhsIallNonterminals+                         -- copy rule (down)+                         _set1OdefinedSets =+                             _lhsIdefinedSets+                         -- copy rule (down)+                         _set2OallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _set2OallNonterminals =+                             _lhsIallNonterminals+                         -- copy rule (down)+                         _set2OdefinedSets =+                             _lhsIdefinedSets+                         ( _set1IcollectedNames,_set1Ierrors,_set1InontSet) =+                             (set1_ _set1OallFields _set1OallNonterminals _set1OdefinedSets)+                         ( _set2IcollectedNames,_set2Ierrors,_set2InontSet) =+                             (set2_ _set2OallFields _set2OallNonterminals _set2OdefinedSets)+                     in  ( _lhsOcollectedNames,_lhsOerrors,_lhsOnontSet))))+sem_NontSet_NamedSet :: Nonterminal ->+                        T_NontSet+sem_NontSet_NamedSet name_ =+    (T_NontSet (\ _lhsIallFields+                  _lhsIallNonterminals+                  _lhsIdefinedSets ->+                    (let _lhsOcollectedNames :: (Set Name)+                         _lhsOerrors :: (Seq Error)+                         _lhsOnontSet :: (Set Nonterminal)+                         -- "Transform.ag"(line 340, column 14)+                         _lhsOcollectedNames =+                             Set.singleton name_+                         -- "Transform.ag"(line 437, column 20)+                         __tup4 =+                             case Map.lookup name_ _lhsIdefinedSets of+                                          Nothing  -> (Set.empty, Seq.single (UndefNont name_))+                                          Just set -> (set, Seq.empty)+                         -- "Transform.ag"(line 437, column 20)+                         (_nontSet,_) =+                             __tup4+                         -- "Transform.ag"(line 437, column 20)+                         (_,_errors) =+                             __tup4+                         -- use rule "Transform.ag"(line 36, column 19)+                         _lhsOerrors =+                             _errors+                         -- copy rule (from local)+                         _lhsOnontSet =+                             _nontSet+                     in  ( _lhsOcollectedNames,_lhsOerrors,_lhsOnontSet))))+sem_NontSet_Path :: Nonterminal ->+                    Nonterminal ->+                    T_NontSet+sem_NontSet_Path from_ to_ =+    (T_NontSet (\ _lhsIallFields+                  _lhsIallNonterminals+                  _lhsIdefinedSets ->+                    (let _lhsOnontSet :: (Set Nonterminal)+                         _lhsOerrors :: (Seq Error)+                         _lhsOcollectedNames :: (Set Name)+                         -- "Transform.ag"(line 443, column 16)+                         _lhsOnontSet =+                             let table = flattenDatas _lhsIallFields+                             in path table from_ to_+                         -- "Transform.ag"(line 445, column 16)+                         _lhsOerrors =+                             let check name | Set.member name _lhsIallNonterminals+                                                        = Seq.empty+                                            | otherwise = Seq.single (UndefNont name)+                             in check from_ <> check to_+                         -- use rule "Transform.ag"(line 73, column 50)+                         _lhsOcollectedNames =+                             Set.empty+                     in  ( _lhsOcollectedNames,_lhsOerrors,_lhsOnontSet))))+sem_NontSet_Union :: T_NontSet ->+                     T_NontSet ->+                     T_NontSet+sem_NontSet_Union (T_NontSet set1_) (T_NontSet set2_) =+    (T_NontSet (\ _lhsIallFields+                  _lhsIallNonterminals+                  _lhsIdefinedSets ->+                    (let _lhsOnontSet :: (Set Nonterminal)+                         _lhsOcollectedNames :: (Set Name)+                         _lhsOerrors :: (Seq Error)+                         _set1OallFields :: DataTypes+                         _set1OallNonterminals :: (Set Nonterminal)+                         _set1OdefinedSets :: DefinedSets+                         _set2OallFields :: DataTypes+                         _set2OallNonterminals :: (Set Nonterminal)+                         _set2OdefinedSets :: DefinedSets+                         _set1IcollectedNames :: (Set Name)+                         _set1Ierrors :: (Seq Error)+                         _set1InontSet :: (Set Nonterminal)+                         _set2IcollectedNames :: (Set Name)+                         _set2Ierrors :: (Seq Error)+                         _set2InontSet :: (Set Nonterminal)+                         -- "Transform.ag"(line 440, column 16)+                         _lhsOnontSet =+                             Set.union         _set1InontSet _set2InontSet+                         -- use rule "Transform.ag"(line 73, column 50)+                         _lhsOcollectedNames =+                             _set1IcollectedNames `Set.union` _set2IcollectedNames+                         -- use rule "Transform.ag"(line 36, column 19)+                         _lhsOerrors =+                             _set1Ierrors Seq.<> _set2Ierrors+                         -- copy rule (down)+                         _set1OallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _set1OallNonterminals =+                             _lhsIallNonterminals+                         -- copy rule (down)+                         _set1OdefinedSets =+                             _lhsIdefinedSets+                         -- copy rule (down)+                         _set2OallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _set2OallNonterminals =+                             _lhsIallNonterminals+                         -- copy rule (down)+                         _set2OdefinedSets =+                             _lhsIdefinedSets+                         ( _set1IcollectedNames,_set1Ierrors,_set1InontSet) =+                             (set1_ _set1OallFields _set1OallNonterminals _set1OdefinedSets)+                         ( _set2IcollectedNames,_set2Ierrors,_set2InontSet) =+                             (set2_ _set2OallFields _set2OallNonterminals _set2OdefinedSets)+                     in  ( _lhsOcollectedNames,_lhsOerrors,_lhsOnontSet))))+-- Pattern -----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         definedAttrs         : [AttrName]+         definedInsts         : [Identifier]+         patunder             : [AttrName]->Pattern+         stpos                : Pos+   alternatives:+      alternative Alias:+         child field          : {Name}+         child attr           : {Name}+         child pat            : Pattern+         child parts          : Patterns+         visit 0:+            local copy        : _+      alternative Constr:+         child name           : {Constructor}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Product:+         child pos            : {Pos}+         child pats           : Patterns+         visit 0:+            local copy        : _+      alternative Underscore:+         child pos            : {Pos}+         visit 0:+            local copy        : _+-}+-- cata+sem_Pattern :: Pattern ->+               T_Pattern+sem_Pattern (Alias _field _attr _pat _parts) =+    (sem_Pattern_Alias _field _attr (sem_Pattern _pat) (sem_Patterns _parts))+sem_Pattern (Constr _name _pats) =+    (sem_Pattern_Constr _name (sem_Patterns _pats))+sem_Pattern (Product _pos _pats) =+    (sem_Pattern_Product _pos (sem_Patterns _pats))+sem_Pattern (Underscore _pos) =+    (sem_Pattern_Underscore _pos)+-- semantic domain+newtype T_Pattern = T_Pattern (( Pattern,([AttrName]),([Identifier]),([AttrName]->Pattern),Pos))+data Inh_Pattern = Inh_Pattern {}+data Syn_Pattern = Syn_Pattern {copy_Syn_Pattern :: Pattern,definedAttrs_Syn_Pattern :: [AttrName],definedInsts_Syn_Pattern :: [Identifier],patunder_Syn_Pattern :: [AttrName]->Pattern,stpos_Syn_Pattern :: Pos}+wrap_Pattern (T_Pattern sem) (Inh_Pattern ) =+    (let ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder,_lhsOstpos) =+             (sem )+     in  (Syn_Pattern _lhsOcopy _lhsOdefinedAttrs _lhsOdefinedInsts _lhsOpatunder _lhsOstpos))+sem_Pattern_Alias :: Name ->+                     Name ->+                     T_Pattern ->+                     T_Patterns ->+                     T_Pattern+sem_Pattern_Alias field_ attr_ (T_Pattern pat_) (T_Patterns parts_) =+    (T_Pattern (let _lhsOdefinedAttrs :: ([AttrName])+                    _lhsOpatunder :: ([AttrName]->Pattern)+                    _lhsOdefinedInsts :: ([Identifier])+                    _lhsOstpos :: Pos+                    _lhsOcopy :: Pattern+                    _patIcopy :: Pattern+                    _patIdefinedAttrs :: ([AttrName])+                    _patIdefinedInsts :: ([Identifier])+                    _patIpatunder :: ([AttrName]->Pattern)+                    _patIstpos :: Pos+                    _partsIcopy :: Patterns+                    _partsIdefinedAttrs :: ([AttrName])+                    _partsIdefinedInsts :: ([Identifier])+                    _partsIpatunder :: ([AttrName]->Patterns)+                    -- "Transform.ag"(line 711, column 11)+                    _lhsOdefinedAttrs =+                        (field_, attr_) : _patIdefinedAttrs+                    -- "Transform.ag"(line 712, column 11)+                    _lhsOpatunder =+                        \us -> if ((field_,attr_) `elem` us) then Underscore noPos else _copy+                    -- "Transform.ag"(line 713, column 11)+                    _lhsOdefinedInsts =+                        (if field_ == _INST then [attr_] else []) ++ _patIdefinedInsts+                    -- "Transform.ag"(line 727, column 16)+                    _lhsOstpos =+                        getPos field_+                    -- self rule+                    _copy =+                        Alias field_ attr_ _patIcopy _partsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patIcopy,_patIdefinedAttrs,_patIdefinedInsts,_patIpatunder,_patIstpos) =+                        (pat_ )+                    ( _partsIcopy,_partsIdefinedAttrs,_partsIdefinedInsts,_partsIpatunder) =+                        (parts_ )+                in  ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder,_lhsOstpos)))+sem_Pattern_Constr :: Constructor ->+                      T_Patterns ->+                      T_Pattern+sem_Pattern_Constr name_ (T_Patterns pats_) =+    (T_Pattern (let _lhsOpatunder :: ([AttrName]->Pattern)+                    _lhsOstpos :: Pos+                    _lhsOdefinedAttrs :: ([AttrName])+                    _lhsOdefinedInsts :: ([Identifier])+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIdefinedAttrs :: ([AttrName])+                    _patsIdefinedInsts :: ([Identifier])+                    _patsIpatunder :: ([AttrName]->Patterns)+                    -- "Transform.ag"(line 715, column 12)+                    _lhsOpatunder =+                        \us -> Constr name_ (_patsIpatunder us)+                    -- "Transform.ag"(line 725, column 16)+                    _lhsOstpos =+                        getPos name_+                    -- use rule "Transform.ag"(line 706, column 42)+                    _lhsOdefinedAttrs =+                        _patsIdefinedAttrs+                    -- use rule "Transform.ag"(line 705, column 55)+                    _lhsOdefinedInsts =+                        _patsIdefinedInsts+                    -- self rule+                    _copy =+                        Constr name_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIdefinedAttrs,_patsIdefinedInsts,_patsIpatunder) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder,_lhsOstpos)))+sem_Pattern_Product :: Pos ->+                       T_Patterns ->+                       T_Pattern+sem_Pattern_Product pos_ (T_Patterns pats_) =+    (T_Pattern (let _lhsOpatunder :: ([AttrName]->Pattern)+                    _lhsOstpos :: Pos+                    _lhsOdefinedAttrs :: ([AttrName])+                    _lhsOdefinedInsts :: ([Identifier])+                    _lhsOcopy :: Pattern+                    _patsIcopy :: Patterns+                    _patsIdefinedAttrs :: ([AttrName])+                    _patsIdefinedInsts :: ([Identifier])+                    _patsIpatunder :: ([AttrName]->Patterns)+                    -- "Transform.ag"(line 716, column 13)+                    _lhsOpatunder =+                        \us -> Product pos_ (_patsIpatunder us)+                    -- "Transform.ag"(line 726, column 16)+                    _lhsOstpos =+                        pos_+                    -- use rule "Transform.ag"(line 706, column 42)+                    _lhsOdefinedAttrs =+                        _patsIdefinedAttrs+                    -- use rule "Transform.ag"(line 705, column 55)+                    _lhsOdefinedInsts =+                        _patsIdefinedInsts+                    -- self rule+                    _copy =+                        Product pos_ _patsIcopy+                    -- self rule+                    _lhsOcopy =+                        _copy+                    ( _patsIcopy,_patsIdefinedAttrs,_patsIdefinedInsts,_patsIpatunder) =+                        (pats_ )+                in  ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder,_lhsOstpos)))+sem_Pattern_Underscore :: Pos ->+                          T_Pattern+sem_Pattern_Underscore pos_ =+    (T_Pattern (let _lhsOpatunder :: ([AttrName]->Pattern)+                    _lhsOstpos :: Pos+                    _lhsOdefinedAttrs :: ([AttrName])+                    _lhsOdefinedInsts :: ([Identifier])+                    _lhsOcopy :: Pattern+                    -- "Transform.ag"(line 714, column 16)+                    _lhsOpatunder =+                        \us -> _copy+                    -- "Transform.ag"(line 728, column 16)+                    _lhsOstpos =+                        pos_+                    -- use rule "Transform.ag"(line 706, column 42)+                    _lhsOdefinedAttrs =+                        []+                    -- use rule "Transform.ag"(line 705, column 55)+                    _lhsOdefinedInsts =+                        []+                    -- self rule+                    _copy =+                        Underscore pos_+                    -- self rule+                    _lhsOcopy =+                        _copy+                in  ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder,_lhsOstpos)))+-- Patterns ----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         copy                 : SELF+         definedAttrs         : [AttrName]+         definedInsts         : [Identifier]+         patunder             : [AttrName]->Patterns+   alternatives:+      alternative Cons:+         child hd             : Pattern+         child tl             : Patterns+         visit 0:+            local copy        : _+      alternative Nil:+         visit 0:+            local copy        : _+-}+-- cata+sem_Patterns :: Patterns ->+                T_Patterns+sem_Patterns list =+    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list))+-- semantic domain+newtype T_Patterns = T_Patterns (( Patterns,([AttrName]),([Identifier]),([AttrName]->Patterns)))+data Inh_Patterns = Inh_Patterns {}+data Syn_Patterns = Syn_Patterns {copy_Syn_Patterns :: Patterns,definedAttrs_Syn_Patterns :: [AttrName],definedInsts_Syn_Patterns :: [Identifier],patunder_Syn_Patterns :: [AttrName]->Patterns}+wrap_Patterns (T_Patterns sem) (Inh_Patterns ) =+    (let ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder) =+             (sem )+     in  (Syn_Patterns _lhsOcopy _lhsOdefinedAttrs _lhsOdefinedInsts _lhsOpatunder))+sem_Patterns_Cons :: T_Pattern ->+                     T_Patterns ->+                     T_Patterns+sem_Patterns_Cons (T_Pattern hd_) (T_Patterns tl_) =+    (T_Patterns (let _lhsOpatunder :: ([AttrName]->Patterns)+                     _lhsOdefinedAttrs :: ([AttrName])+                     _lhsOdefinedInsts :: ([Identifier])+                     _lhsOcopy :: Patterns+                     _hdIcopy :: Pattern+                     _hdIdefinedAttrs :: ([AttrName])+                     _hdIdefinedInsts :: ([Identifier])+                     _hdIpatunder :: ([AttrName]->Pattern)+                     _hdIstpos :: Pos+                     _tlIcopy :: Patterns+                     _tlIdefinedAttrs :: ([AttrName])+                     _tlIdefinedInsts :: ([Identifier])+                     _tlIpatunder :: ([AttrName]->Patterns)+                     -- "Transform.ag"(line 720, column 10)+                     _lhsOpatunder =+                         \us -> (_hdIpatunder us) : (_tlIpatunder us)+                     -- use rule "Transform.ag"(line 706, column 42)+                     _lhsOdefinedAttrs =+                         _hdIdefinedAttrs ++ _tlIdefinedAttrs+                     -- use rule "Transform.ag"(line 705, column 55)+                     _lhsOdefinedInsts =+                         _hdIdefinedInsts ++ _tlIdefinedInsts+                     -- self rule+                     _copy =+                         (:) _hdIcopy _tlIcopy+                     -- self rule+                     _lhsOcopy =+                         _copy+                     ( _hdIcopy,_hdIdefinedAttrs,_hdIdefinedInsts,_hdIpatunder,_hdIstpos) =+                         (hd_ )+                     ( _tlIcopy,_tlIdefinedAttrs,_tlIdefinedInsts,_tlIpatunder) =+                         (tl_ )+                 in  ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder)))+sem_Patterns_Nil :: T_Patterns+sem_Patterns_Nil  =+    (T_Patterns (let _lhsOpatunder :: ([AttrName]->Patterns)+                     _lhsOdefinedAttrs :: ([AttrName])+                     _lhsOdefinedInsts :: ([Identifier])+                     _lhsOcopy :: Patterns+                     -- "Transform.ag"(line 719, column 9)+                     _lhsOpatunder =+                         \us ->  []+                     -- use rule "Transform.ag"(line 706, column 42)+                     _lhsOdefinedAttrs =+                         []+                     -- use rule "Transform.ag"(line 705, column 55)+                     _lhsOdefinedInsts =+                         []+                     -- self rule+                     _copy =+                         []+                     -- self rule+                     _lhsOcopy =+                         _copy+                 in  ( _lhsOcopy,_lhsOdefinedAttrs,_lhsOdefinedInsts,_lhsOpatunder)))+-- SemAlt ------------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allAttrDecls         : Map Nonterminal (Attributes, Attributes)+         allFields            : DataTypes+         nts                  : Set Nonterminal+      synthesized attributes:+         attrOrderCollect     : AttrOrderMap+         collectedInsts       : [ (Nonterminal, Constructor, [Identifier]) ]+         collectedRules       : [ (Nonterminal, Constructor, RuleInfo)]+         collectedSigs        : [ (Nonterminal, Constructor, SigInfo) ]+         errors               : Seq Error+         orderDepErrorsCollect : Seq Error+         semPragmasCollect    : PragmaMap+   alternatives:+      alternative SemAlt:+         child pos            : {Pos}+         child constructorSet : ConstructorSet+         child rules          : SemDefs+         visit 0:+            local pragmaNames : _+            local attrOrders  : _+            local coninfo     : _+-}+-- cata+sem_SemAlt :: SemAlt ->+              T_SemAlt+sem_SemAlt (SemAlt _pos _constructorSet _rules) =+    (sem_SemAlt_SemAlt _pos (sem_ConstructorSet _constructorSet) (sem_SemDefs _rules))+-- semantic domain+newtype T_SemAlt = T_SemAlt ((Map Nonterminal (Attributes, Attributes)) ->+                             DataTypes ->+                             (Set Nonterminal) ->+                             ( AttrOrderMap,([ (Nonterminal, Constructor, [Identifier]) ]),([ (Nonterminal, Constructor, RuleInfo)]),([ (Nonterminal, Constructor, SigInfo) ]),(Seq Error),(Seq Error),PragmaMap))+data Inh_SemAlt = Inh_SemAlt {allAttrDecls_Inh_SemAlt :: Map Nonterminal (Attributes, Attributes),allFields_Inh_SemAlt :: DataTypes,nts_Inh_SemAlt :: Set Nonterminal}+data Syn_SemAlt = Syn_SemAlt {attrOrderCollect_Syn_SemAlt :: AttrOrderMap,collectedInsts_Syn_SemAlt :: [ (Nonterminal, Constructor, [Identifier]) ],collectedRules_Syn_SemAlt :: [ (Nonterminal, Constructor, RuleInfo)],collectedSigs_Syn_SemAlt :: [ (Nonterminal, Constructor, SigInfo) ],errors_Syn_SemAlt :: Seq Error,orderDepErrorsCollect_Syn_SemAlt :: Seq Error,semPragmasCollect_Syn_SemAlt :: PragmaMap}+wrap_SemAlt (T_SemAlt sem) (Inh_SemAlt _lhsIallAttrDecls _lhsIallFields _lhsInts) =+    (let ( _lhsOattrOrderCollect,_lhsOcollectedInsts,_lhsOcollectedRules,_lhsOcollectedSigs,_lhsOerrors,_lhsOorderDepErrorsCollect,_lhsOsemPragmasCollect) =+             (sem _lhsIallAttrDecls _lhsIallFields _lhsInts)+     in  (Syn_SemAlt _lhsOattrOrderCollect _lhsOcollectedInsts _lhsOcollectedRules _lhsOcollectedSigs _lhsOerrors _lhsOorderDepErrorsCollect _lhsOsemPragmasCollect))+sem_SemAlt_SemAlt :: Pos ->+                     T_ConstructorSet ->+                     T_SemDefs ->+                     T_SemAlt+sem_SemAlt_SemAlt pos_ (T_ConstructorSet constructorSet_) (T_SemDefs rules_) =+    (T_SemAlt (\ _lhsIallAttrDecls+                 _lhsIallFields+                 _lhsInts ->+                   (let _lhsOsemPragmasCollect :: PragmaMap+                        _lhsOattrOrderCollect :: AttrOrderMap+                        _lhsOerrors :: (Seq Error)+                        _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                        _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                        _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                        _lhsOorderDepErrorsCollect :: (Seq Error)+                        _constructorSetIcollectedConstructorNames :: (Set Constructor)+                        _constructorSetIconstructors :: ((Set Constructor->Set Constructor))+                        _constructorSetIerrors :: (Seq Error)+                        _rulesIdefinedInsts :: ([Identifier])+                        _rulesIorderDepsCollect :: (Set Dependency)+                        _rulesIpragmaNamesCollect :: ([Name])+                        _rulesIruleInfos :: ([RuleInfo])+                        _rulesIsigInfos :: ([SigInfo] )+                        -- "Transform.ag"(line 536, column 7)+                        _pragmaNames =+                            Set.fromList _rulesIpragmaNamesCollect+                        -- "Transform.ag"(line 537, column 7)+                        _lhsOsemPragmasCollect =+                            foldr pragmaMapUnion Map.empty [ pragmaMapSingle nt con _pragmaNames+                                                           | (nt, conset, _) <- _coninfo+                                                           , con <- Set.toList conset+                                                           ]+                        -- "Transform.ag"(line 566, column 7)+                        _attrOrders =+                            [ orderMapSingle nt con _rulesIorderDepsCollect+                            | (nt, conset, _) <- _coninfo+                            , con <- Set.toList conset+                            ]+                        -- "Transform.ag"(line 572, column 7)+                        _lhsOattrOrderCollect =+                            foldr orderMapUnion Map.empty _attrOrders+                        -- "Transform.ag"(line 666, column 12)+                        _coninfo =+                            [ (nt, conset, conkeys)+                            | nt  <- Set.toList _lhsInts+                            , let conmap = Map.findWithDefault Map.empty nt _lhsIallFields+                            , let conkeys = Set.fromList (Map.keys conmap)+                            , let conset  = _constructorSetIconstructors conkeys+                            ]+                        -- "Transform.ag"(line 673, column 12)+                        _lhsOerrors =+                            Seq.fromList+                               [ UndefAlt nt con+                               | (nt, conset, conkeys) <- _coninfo+                               , con <- Set.toList (Set.difference conset conkeys)+                               ]+                        -- "Transform.ag"(line 678, column 12)+                        _lhsOcollectedRules =+                            [ (nt,con,r)+                            | (nt, conset, _) <- _coninfo+                            , con <- Set.toList conset+                            , r <- _rulesIruleInfos+                            ]+                        -- "Transform.ag"(line 684, column 12)+                        _lhsOcollectedSigs =+                            [ (nt,con,ts)+                            | (nt, conset, _) <- _coninfo+                            , con <- Set.toList conset+                            , ts <- _rulesIsigInfos+                            ]+                        -- "Transform.ag"(line 691, column 12)+                        _lhsOcollectedInsts =+                            [ (nt,con,_rulesIdefinedInsts)+                            | (nt, conset, _) <- _coninfo+                            , con <- Set.toList conset+                            ]+                        -- use rule "Transform.ag"(line 561, column 60)+                        _lhsOorderDepErrorsCollect =+                            Seq.empty+                        ( _constructorSetIcollectedConstructorNames,_constructorSetIconstructors,_constructorSetIerrors) =+                            (constructorSet_ )+                        ( _rulesIdefinedInsts,_rulesIorderDepsCollect,_rulesIpragmaNamesCollect,_rulesIruleInfos,_rulesIsigInfos) =+                            (rules_ )+                    in  ( _lhsOattrOrderCollect,_lhsOcollectedInsts,_lhsOcollectedRules,_lhsOcollectedSigs,_lhsOerrors,_lhsOorderDepErrorsCollect,_lhsOsemPragmasCollect))))+-- SemAlts -----------------------------------------------------+{-+   visit 0:+      inherited attributes:+         allAttrDecls         : Map Nonterminal (Attributes, Attributes)+         allFields            : DataTypes+         nts                  : Set Nonterminal+      synthesized attributes:+         attrOrderCollect     : AttrOrderMap+         collectedInsts       : [ (Nonterminal, Constructor, [Identifier]) ]+         collectedRules       : [ (Nonterminal, Constructor, RuleInfo)]+         collectedSigs        : [ (Nonterminal, Constructor, SigInfo) ]+         errors               : Seq Error+         orderDepErrorsCollect : Seq Error+         semPragmasCollect    : PragmaMap+   alternatives:+      alternative Cons:+         child hd             : SemAlt+         child tl             : SemAlts+      alternative Nil:+-}+-- cata+sem_SemAlts :: SemAlts ->+               T_SemAlts+sem_SemAlts list =+    (Prelude.foldr sem_SemAlts_Cons sem_SemAlts_Nil (Prelude.map sem_SemAlt list))+-- semantic domain+newtype T_SemAlts = T_SemAlts ((Map Nonterminal (Attributes, Attributes)) ->+                               DataTypes ->+                               (Set Nonterminal) ->+                               ( AttrOrderMap,([ (Nonterminal, Constructor, [Identifier]) ]),([ (Nonterminal, Constructor, RuleInfo)]),([ (Nonterminal, Constructor, SigInfo) ]),(Seq Error),(Seq Error),PragmaMap))+data Inh_SemAlts = Inh_SemAlts {allAttrDecls_Inh_SemAlts :: Map Nonterminal (Attributes, Attributes),allFields_Inh_SemAlts :: DataTypes,nts_Inh_SemAlts :: Set Nonterminal}+data Syn_SemAlts = Syn_SemAlts {attrOrderCollect_Syn_SemAlts :: AttrOrderMap,collectedInsts_Syn_SemAlts :: [ (Nonterminal, Constructor, [Identifier]) ],collectedRules_Syn_SemAlts :: [ (Nonterminal, Constructor, RuleInfo)],collectedSigs_Syn_SemAlts :: [ (Nonterminal, Constructor, SigInfo) ],errors_Syn_SemAlts :: Seq Error,orderDepErrorsCollect_Syn_SemAlts :: Seq Error,semPragmasCollect_Syn_SemAlts :: PragmaMap}+wrap_SemAlts (T_SemAlts sem) (Inh_SemAlts _lhsIallAttrDecls _lhsIallFields _lhsInts) =+    (let ( _lhsOattrOrderCollect,_lhsOcollectedInsts,_lhsOcollectedRules,_lhsOcollectedSigs,_lhsOerrors,_lhsOorderDepErrorsCollect,_lhsOsemPragmasCollect) =+             (sem _lhsIallAttrDecls _lhsIallFields _lhsInts)+     in  (Syn_SemAlts _lhsOattrOrderCollect _lhsOcollectedInsts _lhsOcollectedRules _lhsOcollectedSigs _lhsOerrors _lhsOorderDepErrorsCollect _lhsOsemPragmasCollect))+sem_SemAlts_Cons :: T_SemAlt ->+                    T_SemAlts ->+                    T_SemAlts+sem_SemAlts_Cons (T_SemAlt hd_) (T_SemAlts tl_) =+    (T_SemAlts (\ _lhsIallAttrDecls+                  _lhsIallFields+                  _lhsInts ->+                    (let _lhsOattrOrderCollect :: AttrOrderMap+                         _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                         _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                         _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                         _lhsOerrors :: (Seq Error)+                         _lhsOorderDepErrorsCollect :: (Seq Error)+                         _lhsOsemPragmasCollect :: PragmaMap+                         _hdOallAttrDecls :: (Map Nonterminal (Attributes, Attributes))+                         _hdOallFields :: DataTypes+                         _hdOnts :: (Set Nonterminal)+                         _tlOallAttrDecls :: (Map Nonterminal (Attributes, Attributes))+                         _tlOallFields :: DataTypes+                         _tlOnts :: (Set Nonterminal)+                         _hdIattrOrderCollect :: AttrOrderMap+                         _hdIcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                         _hdIcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                         _hdIcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                         _hdIerrors :: (Seq Error)+                         _hdIorderDepErrorsCollect :: (Seq Error)+                         _hdIsemPragmasCollect :: PragmaMap+                         _tlIattrOrderCollect :: AttrOrderMap+                         _tlIcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                         _tlIcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                         _tlIcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                         _tlIerrors :: (Seq Error)+                         _tlIorderDepErrorsCollect :: (Seq Error)+                         _tlIsemPragmasCollect :: PragmaMap+                         -- use rule "Transform.ag"(line 560, column 55)+                         _lhsOattrOrderCollect =+                             _hdIattrOrderCollect `orderMapUnion` _tlIattrOrderCollect+                         -- use rule "Transform.ag"(line 136, column 29)+                         _lhsOcollectedInsts =+                             _hdIcollectedInsts ++ _tlIcollectedInsts+                         -- use rule "Transform.ag"(line 134, column 29)+                         _lhsOcollectedRules =+                             _hdIcollectedRules ++ _tlIcollectedRules+                         -- use rule "Transform.ag"(line 135, column 29)+                         _lhsOcollectedSigs =+                             _hdIcollectedSigs ++ _tlIcollectedSigs+                         -- use rule "Transform.ag"(line 36, column 19)+                         _lhsOerrors =+                             _hdIerrors Seq.<> _tlIerrors+                         -- use rule "Transform.ag"(line 561, column 60)+                         _lhsOorderDepErrorsCollect =+                             _hdIorderDepErrorsCollect Seq.<> _tlIorderDepErrorsCollect+                         -- use rule "Transform.ag"(line 532, column 56)+                         _lhsOsemPragmasCollect =+                             _hdIsemPragmasCollect `pragmaMapUnion` _tlIsemPragmasCollect+                         -- copy rule (down)+                         _hdOallAttrDecls =+                             _lhsIallAttrDecls+                         -- copy rule (down)+                         _hdOallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _hdOnts =+                             _lhsInts+                         -- copy rule (down)+                         _tlOallAttrDecls =+                             _lhsIallAttrDecls+                         -- copy rule (down)+                         _tlOallFields =+                             _lhsIallFields+                         -- copy rule (down)+                         _tlOnts =+                             _lhsInts+                         ( _hdIattrOrderCollect,_hdIcollectedInsts,_hdIcollectedRules,_hdIcollectedSigs,_hdIerrors,_hdIorderDepErrorsCollect,_hdIsemPragmasCollect) =+                             (hd_ _hdOallAttrDecls _hdOallFields _hdOnts)+                         ( _tlIattrOrderCollect,_tlIcollectedInsts,_tlIcollectedRules,_tlIcollectedSigs,_tlIerrors,_tlIorderDepErrorsCollect,_tlIsemPragmasCollect) =+                             (tl_ _tlOallAttrDecls _tlOallFields _tlOnts)+                     in  ( _lhsOattrOrderCollect,_lhsOcollectedInsts,_lhsOcollectedRules,_lhsOcollectedSigs,_lhsOerrors,_lhsOorderDepErrorsCollect,_lhsOsemPragmasCollect))))+sem_SemAlts_Nil :: T_SemAlts+sem_SemAlts_Nil  =+    (T_SemAlts (\ _lhsIallAttrDecls+                  _lhsIallFields+                  _lhsInts ->+                    (let _lhsOattrOrderCollect :: AttrOrderMap+                         _lhsOcollectedInsts :: ([ (Nonterminal, Constructor, [Identifier]) ])+                         _lhsOcollectedRules :: ([ (Nonterminal, Constructor, RuleInfo)])+                         _lhsOcollectedSigs :: ([ (Nonterminal, Constructor, SigInfo) ])+                         _lhsOerrors :: (Seq Error)+                         _lhsOorderDepErrorsCollect :: (Seq Error)+                         _lhsOsemPragmasCollect :: PragmaMap+                         -- use rule "Transform.ag"(line 560, column 55)+                         _lhsOattrOrderCollect =+                             Map.empty+                         -- use rule "Transform.ag"(line 136, column 29)+                         _lhsOcollectedInsts =+                             []+                         -- use rule "Transform.ag"(line 134, column 29)+                         _lhsOcollectedRules =+                             []+                         -- use rule "Transform.ag"(line 135, column 29)+                         _lhsOcollectedSigs =+                             []+                         -- use rule "Transform.ag"(line 36, column 19)+                         _lhsOerrors =+                             Seq.empty+                         -- use rule "Transform.ag"(line 561, column 60)+                         _lhsOorderDepErrorsCollect =+                             Seq.empty+                         -- use rule "Transform.ag"(line 532, column 56)+                         _lhsOsemPragmasCollect =+                             Map.empty+                     in  ( _lhsOattrOrderCollect,_lhsOcollectedInsts,_lhsOcollectedRules,_lhsOcollectedSigs,_lhsOerrors,_lhsOorderDepErrorsCollect,_lhsOsemPragmasCollect))))+-- SemDef ------------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         definedInsts         : [Identifier]+         orderDepsCollect     : Set Dependency+         pragmaNamesCollect   : [Name]+         ruleInfos            : [RuleInfo]+         sigInfos             : [SigInfo] +   alternatives:+      alternative AttrOrderBefore:+         child before         : {(Identifier,Identifier)}+         child after          : {(Identifier,Identifier)}+         visit 0:+            local dependency  : _+      alternative Def:+         child pattern        : Pattern+         child rhs            : {Expression}+         child owrt           : {Bool}+      alternative SemPragma:+         child names          : {[Name]}+      alternative TypeDef:+         child ident          : {Identifier}+         child tp             : {Type}+-}+-- cata+sem_SemDef :: SemDef ->+              T_SemDef+sem_SemDef (AttrOrderBefore _before _after) =+    (sem_SemDef_AttrOrderBefore _before _after)+sem_SemDef (Def _pattern _rhs _owrt) =+    (sem_SemDef_Def (sem_Pattern _pattern) _rhs _owrt)+sem_SemDef (SemPragma _names) =+    (sem_SemDef_SemPragma _names)+sem_SemDef (TypeDef _ident _tp) =+    (sem_SemDef_TypeDef _ident _tp)+-- semantic domain+newtype T_SemDef = T_SemDef (( ([Identifier]),(Set Dependency),([Name]),([RuleInfo]),([SigInfo] )))+data Inh_SemDef = Inh_SemDef {}+data Syn_SemDef = Syn_SemDef {definedInsts_Syn_SemDef :: [Identifier],orderDepsCollect_Syn_SemDef :: Set Dependency,pragmaNamesCollect_Syn_SemDef :: [Name],ruleInfos_Syn_SemDef :: [RuleInfo],sigInfos_Syn_SemDef :: [SigInfo] }+wrap_SemDef (T_SemDef sem) (Inh_SemDef ) =+    (let ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos) =+             (sem )+     in  (Syn_SemDef _lhsOdefinedInsts _lhsOorderDepsCollect _lhsOpragmaNamesCollect _lhsOruleInfos _lhsOsigInfos))+sem_SemDef_AttrOrderBefore :: ((Identifier,Identifier)) ->+                              ((Identifier,Identifier)) ->+                              T_SemDef+sem_SemDef_AttrOrderBefore before_ after_ =+    (T_SemDef (let _lhsOorderDepsCollect :: (Set Dependency)+                   _lhsOdefinedInsts :: ([Identifier])+                   _lhsOpragmaNamesCollect :: ([Name])+                   _lhsOruleInfos :: ([RuleInfo])+                   _lhsOsigInfos :: ([SigInfo] )+                   -- "Transform.ag"(line 578, column 7)+                   _dependency =+                       Dependency before_ after_+                   -- "Transform.ag"(line 579, column 7)+                   _lhsOorderDepsCollect =+                       Set.singleton _dependency+                   -- use rule "Transform.ag"(line 705, column 55)+                   _lhsOdefinedInsts =+                       []+                   -- use rule "Transform.ag"(line 542, column 46)+                   _lhsOpragmaNamesCollect =+                       []+                   -- use rule "Transform.ag"(line 660, column 37)+                   _lhsOruleInfos =+                       []+                   -- use rule "Transform.ag"(line 661, column 37)+                   _lhsOsigInfos =+                       []+               in  ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos)))+sem_SemDef_Def :: T_Pattern ->+                  Expression ->+                  Bool ->+                  T_SemDef+sem_SemDef_Def (T_Pattern pattern_) rhs_ owrt_ =+    (T_SemDef (let _lhsOruleInfos :: ([RuleInfo])+                   _lhsOdefinedInsts :: ([Identifier])+                   _lhsOorderDepsCollect :: (Set Dependency)+                   _lhsOpragmaNamesCollect :: ([Name])+                   _lhsOsigInfos :: ([SigInfo] )+                   _patternIcopy :: Pattern+                   _patternIdefinedAttrs :: ([AttrName])+                   _patternIdefinedInsts :: ([Identifier])+                   _patternIpatunder :: ([AttrName]->Pattern)+                   _patternIstpos :: Pos+                   -- "Transform.ag"(line 699, column 10)+                   _lhsOruleInfos =+                       [ (_patternIpatunder, rhs_, _patternIdefinedAttrs, owrt_, show _patternIstpos) ]+                   -- use rule "Transform.ag"(line 705, column 55)+                   _lhsOdefinedInsts =+                       _patternIdefinedInsts+                   -- use rule "Transform.ag"(line 574, column 44)+                   _lhsOorderDepsCollect =+                       Set.empty+                   -- use rule "Transform.ag"(line 542, column 46)+                   _lhsOpragmaNamesCollect =+                       []+                   -- use rule "Transform.ag"(line 661, column 37)+                   _lhsOsigInfos =+                       []+                   ( _patternIcopy,_patternIdefinedAttrs,_patternIdefinedInsts,_patternIpatunder,_patternIstpos) =+                       (pattern_ )+               in  ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos)))+sem_SemDef_SemPragma :: ([Name]) ->+                        T_SemDef+sem_SemDef_SemPragma names_ =+    (T_SemDef (let _lhsOpragmaNamesCollect :: ([Name])+                   _lhsOdefinedInsts :: ([Identifier])+                   _lhsOorderDepsCollect :: (Set Dependency)+                   _lhsOruleInfos :: ([RuleInfo])+                   _lhsOsigInfos :: ([SigInfo] )+                   -- "Transform.ag"(line 546, column 7)+                   _lhsOpragmaNamesCollect =+                       names_+                   -- use rule "Transform.ag"(line 705, column 55)+                   _lhsOdefinedInsts =+                       []+                   -- use rule "Transform.ag"(line 574, column 44)+                   _lhsOorderDepsCollect =+                       Set.empty+                   -- use rule "Transform.ag"(line 660, column 37)+                   _lhsOruleInfos =+                       []+                   -- use rule "Transform.ag"(line 661, column 37)+                   _lhsOsigInfos =+                       []+               in  ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos)))+sem_SemDef_TypeDef :: Identifier ->+                      Type ->+                      T_SemDef+sem_SemDef_TypeDef ident_ tp_ =+    (T_SemDef (let _lhsOsigInfos :: ([SigInfo] )+                   _lhsOdefinedInsts :: ([Identifier])+                   _lhsOorderDepsCollect :: (Set Dependency)+                   _lhsOpragmaNamesCollect :: ([Name])+                   _lhsOruleInfos :: ([RuleInfo])+                   -- "Transform.ag"(line 702, column 14)+                   _lhsOsigInfos =+                       [ (ident_, tp_) ]+                   -- use rule "Transform.ag"(line 705, column 55)+                   _lhsOdefinedInsts =+                       []+                   -- use rule "Transform.ag"(line 574, column 44)+                   _lhsOorderDepsCollect =+                       Set.empty+                   -- use rule "Transform.ag"(line 542, column 46)+                   _lhsOpragmaNamesCollect =+                       []+                   -- use rule "Transform.ag"(line 660, column 37)+                   _lhsOruleInfos =+                       []+               in  ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos)))+-- SemDefs -----------------------------------------------------+{-+   visit 0:+      synthesized attributes:+         definedInsts         : [Identifier]+         orderDepsCollect     : Set Dependency+         pragmaNamesCollect   : [Name]+         ruleInfos            : [RuleInfo]+         sigInfos             : [SigInfo] +   alternatives:+      alternative Cons:+         child hd             : SemDef+         child tl             : SemDefs+      alternative Nil:+-}+-- cata+sem_SemDefs :: SemDefs ->+               T_SemDefs+sem_SemDefs list =+    (Prelude.foldr sem_SemDefs_Cons sem_SemDefs_Nil (Prelude.map sem_SemDef list))+-- semantic domain+newtype T_SemDefs = T_SemDefs (( ([Identifier]),(Set Dependency),([Name]),([RuleInfo]),([SigInfo] )))+data Inh_SemDefs = Inh_SemDefs {}+data Syn_SemDefs = Syn_SemDefs {definedInsts_Syn_SemDefs :: [Identifier],orderDepsCollect_Syn_SemDefs :: Set Dependency,pragmaNamesCollect_Syn_SemDefs :: [Name],ruleInfos_Syn_SemDefs :: [RuleInfo],sigInfos_Syn_SemDefs :: [SigInfo] }+wrap_SemDefs (T_SemDefs sem) (Inh_SemDefs ) =+    (let ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos) =+             (sem )+     in  (Syn_SemDefs _lhsOdefinedInsts _lhsOorderDepsCollect _lhsOpragmaNamesCollect _lhsOruleInfos _lhsOsigInfos))+sem_SemDefs_Cons :: T_SemDef ->+                    T_SemDefs ->+                    T_SemDefs+sem_SemDefs_Cons (T_SemDef hd_) (T_SemDefs tl_) =+    (T_SemDefs (let _lhsOdefinedInsts :: ([Identifier])+                    _lhsOorderDepsCollect :: (Set Dependency)+                    _lhsOpragmaNamesCollect :: ([Name])+                    _lhsOruleInfos :: ([RuleInfo])+                    _lhsOsigInfos :: ([SigInfo] )+                    _hdIdefinedInsts :: ([Identifier])+                    _hdIorderDepsCollect :: (Set Dependency)+                    _hdIpragmaNamesCollect :: ([Name])+                    _hdIruleInfos :: ([RuleInfo])+                    _hdIsigInfos :: ([SigInfo] )+                    _tlIdefinedInsts :: ([Identifier])+                    _tlIorderDepsCollect :: (Set Dependency)+                    _tlIpragmaNamesCollect :: ([Name])+                    _tlIruleInfos :: ([RuleInfo])+                    _tlIsigInfos :: ([SigInfo] )+                    -- use rule "Transform.ag"(line 705, column 55)+                    _lhsOdefinedInsts =+                        _hdIdefinedInsts ++ _tlIdefinedInsts+                    -- use rule "Transform.ag"(line 574, column 44)+                    _lhsOorderDepsCollect =+                        _hdIorderDepsCollect `Set.union` _tlIorderDepsCollect+                    -- use rule "Transform.ag"(line 542, column 46)+                    _lhsOpragmaNamesCollect =+                        _hdIpragmaNamesCollect ++ _tlIpragmaNamesCollect+                    -- use rule "Transform.ag"(line 660, column 37)+                    _lhsOruleInfos =+                        _hdIruleInfos ++ _tlIruleInfos+                    -- use rule "Transform.ag"(line 661, column 37)+                    _lhsOsigInfos =+                        _hdIsigInfos ++ _tlIsigInfos+                    ( _hdIdefinedInsts,_hdIorderDepsCollect,_hdIpragmaNamesCollect,_hdIruleInfos,_hdIsigInfos) =+                        (hd_ )+                    ( _tlIdefinedInsts,_tlIorderDepsCollect,_tlIpragmaNamesCollect,_tlIruleInfos,_tlIsigInfos) =+                        (tl_ )+                in  ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos)))+sem_SemDefs_Nil :: T_SemDefs+sem_SemDefs_Nil  =+    (T_SemDefs (let _lhsOdefinedInsts :: ([Identifier])+                    _lhsOorderDepsCollect :: (Set Dependency)+                    _lhsOpragmaNamesCollect :: ([Name])+                    _lhsOruleInfos :: ([RuleInfo])+                    _lhsOsigInfos :: ([SigInfo] )+                    -- use rule "Transform.ag"(line 705, column 55)+                    _lhsOdefinedInsts =+                        []+                    -- use rule "Transform.ag"(line 574, column 44)+                    _lhsOorderDepsCollect =+                        Set.empty+                    -- use rule "Transform.ag"(line 542, column 46)+                    _lhsOpragmaNamesCollect =+                        []+                    -- use rule "Transform.ag"(line 660, column 37)+                    _lhsOruleInfos =+                        []+                    -- use rule "Transform.ag"(line 661, column 37)+                    _lhsOsigInfos =+                        []+                in  ( _lhsOdefinedInsts,_lhsOorderDepsCollect,_lhsOpragmaNamesCollect,_lhsOruleInfos,_lhsOsigInfos)))
+ src/Ag.hs view
@@ -0,0 +1,261 @@+module Main where++import System                        (getArgs, getProgName, exitFailure)+import System.Console.GetOpt         (usageInfo)+import List                          (isSuffixOf)+import Monad                         (zipWithM_)+import Data.Maybe++import qualified Data.Map as Map (elems, partitionWithKey, unionWith)+import qualified UU.DData.Seq as Seq ((<>),toList)+import Pretty++import UU.Parsing                    (Message(..), Action(..))+import UU.Scanner.Position           (Pos, line, file)+import UU.Scanner.Token              (Token)++import qualified Transform          as Pass1 (sem_AG     ,  wrap_AG     ,  Syn_AG      (..), Inh_AG      (..))+import qualified Desugar            as Pass1a (sem_Grammar, wrap_Grammar,  Syn_Grammar (..), Inh_Grammar (..))+import qualified DefaultRules       as Pass2 (sem_Grammar,  wrap_Grammar,  Syn_Grammar (..), Inh_Grammar (..))+import qualified Order              as Pass3 (sem_Grammar,  wrap_Grammar,  Syn_Grammar (..), Inh_Grammar (..))+import qualified GenerateCode       as Pass4 (sem_CGrammar, wrap_CGrammar, Syn_CGrammar(..), Inh_CGrammar(..))+import qualified PrintCode          as Pass5 (sem_Program,  wrap_Program,  Syn_Program (..), Inh_Program (..))+import qualified PrintErrorMessages as PrErr (sem_Errors ,  wrap_Errors ,  Syn_Errors  (..), Inh_Errors  (..), isError)++import qualified AbstractSyntaxDump as GrammarDump (sem_Grammar,  wrap_Grammar,  Syn_Grammar (..), Inh_Grammar (..))+import qualified CodeSyntaxDump as CGrammarDump (sem_CGrammar,  wrap_CGrammar,  Syn_CGrammar (..), Inh_CGrammar (..))++import Options+import Version       (banner)+import Parser        (parseAG, depsAG)+import ErrorMessages (Error(ParserError), Errors)+import CommonTypes   (Blocks)+++main :: IO ()+main        + = do args     <- getArgs+      progName <- getProgName+      +      let usageheader = "Usage info:\n " ++ progName ++ " options file ...\n\nList of options:"+          (flags,files,errs) = getOptions args+          +      if showVersion flags+       then putStrLn banner+       else if null files || showHelp flags || (not.null) errs+       then mapM_ putStrLn (usageInfo usageheader options : errs)+       else if genFileDeps flags+            then reportDeps flags files+            else zipWithM_ (compile flags) files (outputFiles flags++repeat "")+++compile :: Options -> String -> String -> IO ()+compile flags input output+ = do (output0,parseErrors) <- parseAG (searchPath flags) (inputFile input)++      let output1   = Pass1.wrap_AG              (Pass1.sem_AG                                 output0 ) Pass1.Inh_AG       {Pass1.options_Inh_AG       = flags}+          flags'    = Pass1.pragmas_Syn_AG       output1 $ flags+          grammar1  = Pass1.output_Syn_AG        output1+          output1a  = Pass1a.wrap_Grammar        (Pass1a.sem_Grammar grammar1                          ) Pass1a.Inh_Grammar {Pass1a.options_Inh_Grammar = flags'}+          grammar1a =Pass1a.output_Syn_Grammar   output1a+          output2   = Pass2.wrap_Grammar         (Pass2.sem_Grammar grammar1a                          ) Pass2.Inh_Grammar  {Pass2.options_Inh_Grammar  = flags'}+          grammar2  = Pass2.output_Syn_Grammar   output2+          output3   = Pass3.wrap_Grammar         (Pass3.sem_Grammar grammar2                           ) Pass3.Inh_Grammar  {Pass3.options_Inh_Grammar  = flags'}+          grammar3  = Pass3.output_Syn_Grammar   output3+          output4   = Pass4.wrap_CGrammar        (Pass4.sem_CGrammar(Pass3.output_Syn_Grammar  output3)) Pass4.Inh_CGrammar {Pass4.options_Inh_CGrammar = flags'}+          output5   = Pass5.wrap_Program         (Pass5.sem_Program (Pass4.output_Syn_CGrammar output4)) Pass5.Inh_Program  {Pass5.options_Inh_Program  = flags', Pass5.pragmaBlocks_Inh_Program = pragmaBlocksTxt, Pass5.importBlocks_Inh_Program = importBlocksTxt, Pass5.textBlocks_Inh_Program = textBlocksDoc, Pass5.optionsLine_Inh_Program = optionsLine, Pass5.mainFile_Inh_Program = mainFile, Pass5.moduleHeader_Inh_Program = mkModuleHeader $ Pass1.moduleDecl_Syn_AG output1, Pass5.mainName_Inh_Program = mkMainName mainName $ Pass1.moduleDecl_Syn_AG output1}+          output6   = PrErr.wrap_Errors          (PrErr.sem_Errors                       errorsToReport) PrErr.Inh_Errors   {PrErr.options_Inh_Errors   = flags'} ++          dump1    = GrammarDump.wrap_Grammar   (GrammarDump.sem_Grammar grammar1                     ) GrammarDump.Inh_Grammar+          dump2    = GrammarDump.wrap_Grammar   (GrammarDump.sem_Grammar grammar2                     ) GrammarDump.Inh_Grammar+          dump3    = CGrammarDump.wrap_CGrammar (CGrammarDump.sem_CGrammar grammar3                   ) CGrammarDump.Inh_CGrammar++          parseErrorList   = map message2error parseErrors+          errorList        = parseErrorList+                             ++ Seq.toList (      Pass1.errors_Syn_AG       output1+                                           Seq.<> Pass1a.errors_Syn_Grammar output1a+                                           Seq.<> Pass2.errors_Syn_Grammar  output2+                                           Seq.<> Pass3.errors_Syn_Grammar  output3+                                           Seq.<> Pass4.errors_Syn_CGrammar output4+                                           )+                                           +          fatalErrorList = filter PrErr.isError errorList+          +          allErrors = if null parseErrors+                      then if wignore flags'+                           then fatalErrorList+                           else errorsToFront errorList+                      else take 1 parseErrorList+                      -- the other 1000 or so parse errors are usually not that informative+                      +          errorsToReport = take (wmaxerrs flags') allErrors+          +          errorsToStopOn = if werrors flags'+                            then errorList+                            else fatalErrorList+          +          blocks1                    = (Pass1.blocks_Syn_AG output1) {-SM `Map.unionWith (++)` (Pass3.blocks_Syn_Grammar output3)-}+          (pragmaBlocks, blocks2)    = Map.partitionWithKey (\k _->k=="optpragmas") blocks1+          (importBlocks, textBlocks) = Map.partitionWithKey (\k _->k=="imports"   ) blocks2+          +          importBlocksTxt = vlist_sep "" . map addLocationPragma . concat . Map.elems $ importBlocks+          textBlocksDoc   = vlist_sep "" . map addLocationPragma . concat . Map.elems $ textBlocks+          pragmaBlocksTxt = unlines . concat . map fst      . concat . Map.elems $ pragmaBlocks+          +          outputfile = if null output then outputFile input else output+          +          addLocationPragma :: ([String], Pos) -> PP_Doc+          addLocationPragma (strs, p)+            | genLinePragmas flags'+                = "{-# LINE" >#< pp (show (line p)) >#< show (file p) >#< "#-}" >-< vlist (map pp strs) >-< "{-# LINE" >#< ppWithLineNr (pp.show.(+1)) >#< show outputfile >#< "#-}"+            | otherwise+                = vlist (map pp strs)+          +          optionsGHC = option (unbox flags') "-fglasgow-exts" ++ option (bangpats flags') "-fbang-patterns"+          option True s  = [s]+          option False _ = []+          optionsLine | null optionsGHC = ""+                      | otherwise       = "{-# OPTIONS_GHC " ++ unwords optionsGHC ++ " #-}"+          +          mainName = stripPath $ defaultModuleName input+          mainFile = defaultModuleName input++          nrOfErrorsToReport = length $ filter PrErr.isError errorsToReport+          nrOfWarningsToReport = length $ filter (not.PrErr.isError) errorsToReport+          totalNrOfErrors = length $ filter PrErr.isError allErrors+          totalNrOfWarnings = length $ filter (not.PrErr.isError) allErrors+          additionalErrors = totalNrOfErrors - nrOfErrorsToReport+          additionalWarnings = totalNrOfWarnings - nrOfWarningsToReport+          pluralS n = if n == 1 then "" else "s"++      putStr . formatErrors $ PrErr.pp_Syn_Errors output6++      if additionalErrors > 0 +       then putStr $ "\nPlus " ++ show additionalErrors ++ " more error" ++ pluralS additionalErrors +++                     if additionalWarnings > 0+                     then " and " ++ show additionalWarnings ++ " more warning" ++ pluralS additionalWarnings ++ ".\n"+                     else ".\n"+       else if additionalWarnings > 0+            then putStr $ "\nPlus " ++ show additionalWarnings ++ " more warning" ++ pluralS additionalWarnings ++ ".\n"+            else return ()+           +      if not (null fatalErrorList) +       then exitFailure+       else if sepSemMods flags'+            then do -- alternative module gen+                    Pass5.genIO_Syn_Program output5+                    if not (null errorsToStopOn) then exitFailure else return ()+            else do -- conventional module gen+                    let doc = vlist [ pp optionsLine+                                    , pp $ take 70 ("-- UUAGC " ++ drop 50 banner ++ " (" ++ input) ++ ")"+                                    , pp $ if isNothing $ Pass1.moduleDecl_Syn_AG output1+                                           then moduleHeader flags' mainName+                                           else mkModuleHeader (Pass1.moduleDecl_Syn_AG output1) mainName "" "" False+                                    , pp importBlocksTxt+                                    , textBlocksDoc+                                    , vlist $ Pass5.output_Syn_Program output5+                                    , if dumpgrammar flags'+                                      then vlist [ pp "{- Dump of grammar without default rules"+                                                 , GrammarDump.pp_Syn_Grammar dump1+                                                 , pp "-}"+                                                 , pp "{- Dump of grammar with default rules"+                                                 , GrammarDump.pp_Syn_Grammar dump2+                                                 , pp "-}"+                                                 ]+                                      else empty+                                    , if dumpcgrammar flags'+                                      then vlist [ pp "{- Dump of cgrammar" +                                                 , CGrammarDump.pp_Syn_CGrammar dump3+                                                 , pp "-}"+                                                 ]+                                      else empty+                                    ]++                    let docTxt = disp doc 50000 ""+                    writeFile outputfile docTxt+                    if not (null errorsToStopOn) then exitFailure else return ()++++formatErrors :: PP_Doc -> String+formatErrors pp = disp pp 5000 ""+++message2error :: Message Token Pos -> Error+message2error (Msg expect pos action) = ParserError pos (show expect) actionString+ where actionString +        =  case action +           of Insert s -> "inserting: " ++ show s++              Delete s -> "deleting: "  ++ show s++              Other ms -> ms++errorsToFront :: [Error] -> [Error]+errorsToFront mesgs = filter PrErr.isError mesgs ++ filter (not.PrErr.isError) mesgs+++moduleHeader :: Options -> String -> String+moduleHeader flags input+ = case moduleName flags +   of Name nm -> genMod nm+      Default -> genMod (defaultModuleName input)+      NoName  -> ""+   where genMod x = "module " ++ x ++ " where"++inputFile :: String -> String+inputFile name + = if ".ag" `isSuffixOf` name || ".lag" `isSuffixOf` name+   then name+   else name ++ ".ag"++outputFile :: String -> String+outputFile name + = defaultModuleName name ++ ".hs"++defaultModuleName :: String -> String+defaultModuleName name + = if ".ag" `isSuffixOf` name+   then take (length name - 3) name+   else if ".lag" `isSuffixOf` name+   then take (length name - 4) name+   else name++stripPath :: String -> String+stripPath+  = reverse . takeWhile (\c -> c /= '/' && c /= '\\') . reverse++mkMainName :: String -> Maybe (String, String,String) -> String+mkMainName defaultName Nothing+  = defaultName+mkMainName _ (Just (name, _, _))+  = name++mkModuleHeader :: Maybe (String,String,String) -> String -> String -> String -> Bool -> String+mkModuleHeader Nothing defaultName _ _ _+  = "module " ++ defaultName ++ " where"+mkModuleHeader (Just (name, exports, imports)) _ suffix addExports replaceExports+  = "module " ++ name ++ suffix ++ exp ++ " where\n" ++ imports ++ "\n"+  where+    exp = if null exports || (replaceExports && null addExports)+          then ""+          else if null addExports+               then "(" ++ exports ++ ")"+               else if replaceExports+                    then "(" ++ addExports ++ ")"+                    else "(" ++ exports ++ "," ++ addExports ++ ")"++reportDeps :: Options -> [String] -> IO ()+reportDeps flags files+  = do results <- mapM (depsAG (searchPath flags)) files+       let (fs, mesgs) = foldr combine ([],[]) results+       let errs = take (wmaxerrs flags) (map message2error mesgs)+       let ppErrs = PrErr.wrap_Errors (PrErr.sem_Errors errs) PrErr.Inh_Errors {PrErr.options_Inh_Errors = flags}+       if null errs+        then mapM_ putStrLn fs+        else putStr . formatErrors $ PrErr.pp_Syn_Errors ppErrs+  where+    combine :: ([a],[b]) -> ([a], [b]) -> ([a], [b])+    combine (fs, mesgs) (fsr, mesgsr)+      = (fs ++ fsr, mesgs ++ mesgsr)+
+ src/CommonTypes.hs view
@@ -0,0 +1,129 @@+module CommonTypes where++--import UU.Pretty (PP,text,pp)+import Pretty+import UU.Scanner.Position(Pos,noPos)+import qualified Data.Map as Map+import Data.Map(Map)+import Data.Set(Set)+import qualified Data.Set as Set+++type Blocks = Map String [([String], Pos)]++data Identifier  = Ident {getName::String , getPos::Pos}++instance Eq Identifier where+ Ident x _ == Ident y _ = x == y++instance Ord Identifier where + compare (Ident x _) (Ident y _) = compare x y++instance Show Identifier where+  show ident = getName ident++instance PP Identifier where+  pp = text . getName++data Type = Haskell String+          | NT Name++data ComplexType = List Type+                 | Tuple [(Identifier, Type)]+                 | Maybe Type++instance Show ComplexType where+  show (List  t ) = "[" ++ show t ++ "]"+  show (Tuple ts) = "(" ++ showList [ show n ++ ": " ++ show t | (n,t) <- ts ] "" ++ ")"+  show (Maybe t ) = "Maybe " ++ show t++instance Show Type where+  show (Haskell t) = t+  show (NT nt  ) = getName nt++instance Eq Type where+  NT x == NT y = x == y+  _      == _      = False+  +type Attributes  = Map Name Type+type TypeSyns    = [(Nonterminal,ComplexType)]++type AttrNames   = [(Name,Type,(String,String,String))]+type UseMap      = Map Nonterminal (Map Name (String,String,String))+type PragmaMap   = Map Nonterminal (Map Constructor (Set Name))+type Fields      = [(Name,Type)]+type Derivings   = Map Nonterminal (Set Name)+type Strings     = [String]+type Name        = Identifier+type Nonterminal = Name+type Constructor = Name+type AttrOrderMap = Map Nonterminal (Map Constructor (Set Dependency))+data Dependency = Dependency (Identifier,Identifier) (Identifier,Identifier) deriving (Eq,Ord,Show)++type AttrEnv = ( [Name]+               , [(Name,Name)]+               )++identifier x   = Ident x noPos               +nullIdent = identifier ""+_LHS   = identifier "lhs" +_SELF  = identifier "SELF" +_LOC   = identifier "loc" +_INST  = identifier "inst"+_INST' = identifier "inst'"+_FIELD = identifier "field"+_FIRST = identifier "first"+_LAST  = identifier "last"++sdtype :: Nonterminal -> String+sdtype nt = "T_"++getName nt++cataname ::  String -> Name -> String+cataname pre name = pre++getName name++conname :: Bool -> Nonterminal -> Constructor -> String+conname rename nt con | rename =  getName nt ++ "_" ++ getName con+                      | otherwise = getName con++semname  ::  String -> Nonterminal -> Constructor -> String+semname pre nt con =  pre ++ (getName nt ++ "_" ++ getName con)++lhsname :: Bool -> Name -> String+lhsname isIn = attrname isIn _LHS++attrname :: Bool -> Name -> Name -> String+attrname isIn field attr | field == _LOC   = locname attr +                         | field == _INST  = instname attr+                         | field == _INST' = inst'name attr+                         | field == _FIELD = fieldname attr+                         | otherwise       = let direction | isIn      = "I" +                                                           | otherwise = "O"+                                             in '_' : getName field ++ direction ++ getName attr+                               +locname v   = '_' : getName v+instname v  = getName v ++ "_val_"+inst'name v = getName v ++ "_"+fieldname v =  getName v++"_"++typeToString :: Nonterminal -> Type -> String+typeToString _ (Haskell t)  = t+typeToString nt (NT t   ) | t == _SELF = getName nt+                          | otherwise  = getName t++ind :: String -> String+ind s = replicate 3 ' ' ++ s++_NOCASE :: Name+_NOCASE = identifier "nocase"++hasPragma :: PragmaMap -> Nonterminal -> Constructor -> Name -> Bool+hasPragma mp nt con nm+  = nm `Set.member` Map.findWithDefault Set.empty con (Map.findWithDefault Map.empty nt mp)+  +isNonterminal :: Type -> Bool+isNonterminal (NT _) = True+isNonterminal _      = False++extractNonterminal :: Type -> Nonterminal+extractNonterminal (NT n) = n+
+ src/DepTypes.hs view
@@ -0,0 +1,141 @@+module DepTypes where++import CommonTypes++-------------------------------------------------------------------------------+--  Class definitions+-------------------------------------------------------------------------------++class HasAttrAndField a where+ getField :: a -> Identifier+ getAttr :: a -> Identifier++class ContainsTrace a where+ addTraceElem :: TraceElem -> a -> a+ addTrace :: Trace -> a -> a+ +-------------------------------------------------------------------------------+--  Vertices+-------------------------------------------------------------------------------++-- kan helaas niet met named fields, want dat levert een conflict op in de uniekheid vd naamgeving.+-- ERROR "CommonTypes.hs" (line 44): Repeated definition for selector "nt"++data Vertex = Local Name Name Name -- lhs nt, constructor, attribute+            | LHSInh Name Name Name -- lhs nt, constructor, attribute+            | LHSSyn Name Name Name -- lhs nt, constructor, attribute+            | ShRHSInh Name Name Name Name -- lhs nt, constructor, field, attribute !!rhs nt not known, equal to RHSInh!!+            | ShRHSSyn Name Name Name Name -- lhs nt, constructor, field, attribute !!rhs nt not known, equal to RHSSyn!!+            | RHSInh Name Name Name Name Name -- rhs nt, lhs nt, constructor, field, attribute+            | RHSSyn Name Name Name Name Name -- rhs nt, lhs nt, constructor, field, attribute+            | NTInh Name Name -- nt, attribute+            | NTSyn Name Name -- nt, attribute++instance Eq Vertex where+ Local       lhs1 con1       attr1 == Local       lhs2 con2       attr2 = lhs1==lhs2 && con1==con2 && attr1==attr2+ LHSInh      lhs1 con1       attr1 == LHSInh      lhs2 con2       attr2 = lhs1==lhs2 && con1==con2 && attr1==attr2+ LHSSyn      lhs1 con1       attr1 == LHSSyn      lhs2 con2       attr2 = lhs1==lhs2 && con1==con2 && attr1==attr2+ ShRHSInh    lhs1 con1 name1 attr1 == ShRHSInh    lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ ShRHSSyn    lhs1 con1 name1 attr1 == ShRHSSyn    lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ RHSInh rhs1 lhs1 con1 name1 attr1 == RHSInh rhs2 lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ RHSSyn rhs1 lhs1 con1 name1 attr1 == RHSSyn rhs2 lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ ShRHSInh    lhs1 con1 name1 attr1 == RHSInh _    lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ ShRHSSyn    lhs1 con1 name1 attr1 == RHSSyn _    lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ RHSInh _    lhs1 con1 name1 attr1 == ShRHSInh    lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ RHSSyn _    lhs1 con1 name1 attr1 == ShRHSSyn    lhs2 con2 name2 attr2 = lhs1==lhs2 && con1==con2 && name1==name2 && attr1==attr2+ NTInh       nt1             attr1 == NTInh       nt2             attr2 = nt1==nt2 && attr1==attr2+ NTSyn       nt1             attr1 == NTSyn       nt2             attr2 = nt1==nt2 && attr1==attr2+ _                                 == _                                 = False++instance HasAttrAndField Vertex where+ getAttr (Local _ _ attr) = attr+ getAttr (LHSInh _ _ attr) = attr+ getAttr (LHSSyn _ _ attr) = attr+ getAttr (ShRHSInh _ _ _ attr) = attr+ getAttr (ShRHSSyn _ _ _ attr) = attr+ getAttr (RHSInh _ _ _ _ attr) = attr+ getAttr (RHSSyn _ _ _ _ attr) = attr+ getAttr (NTInh _ attr) = attr+ getAttr (NTSyn _ attr) = attr+ getField (Local _ _ _) = nullIdent+ getField (LHSInh _ _ _) = _LHS+ getField (LHSSyn _ _ _) = _LHS+ getField (ShRHSInh _ _ fld _) = fld+ getField (ShRHSSyn _ _ fld _) = fld+ getField (RHSInh _ _ _ fld _) = fld+ getField (RHSSyn _ _ _ fld _) = fld+ getField (NTInh _ _) = nullIdent+ getField (NTSyn _ _) = nullIdent++instance Show Vertex where+ show (Local      lhs con      attr) = show lhs ++ "." ++ show attr ++ "(L," ++ show lhs ++ "." ++ show con ++ ")"+ show (LHSInh     lhs con      attr) = show lhs ++ "." ++ show attr ++ "(I," ++ show lhs ++ "." ++ show con ++ ".lhs)"+ show (LHSSyn     lhs con      attr) = show lhs ++ "." ++ show attr ++ "(S," ++ show lhs ++ "." ++ show con ++ ".lhs)"+ show (ShRHSInh   lhs con name attr) = ""+ show (ShRHSSyn   lhs con name attr) = ""+ show (RHSInh rhs lhs con name attr) = show rhs ++ "." ++ show attr ++ "(I," ++ show lhs ++ "." ++ show con ++ "." ++ show name ++ ")"+ show (RHSSyn rhs lhs con name attr) = show rhs ++ "." ++ show attr ++ "(S," ++ show lhs ++ "." ++ show con ++ "." ++ show name ++ ")"+ show (NTInh      nt           attr) = ""+ show (NTSyn      nt           attr) = ""+++-------------------------------------------------------------------------------+--  Streams, results+-------------------------------------------------------------------------------++type UseStream = (Vertex,Stream)+type Stream = [Result]+type Result = ([UsedAttr],[UsedAttr])+data UsedAttr = Loc Name Name Trace -- field name and attribute name+              | Glo Name Trace -- attribute name++-- lhs en rhs slaan op de lhs en rhs van een attribute equation en niet van de productie!!+data TraceElem = TE { lineNr  :: Int+                    , nt      :: Nonterminal+                    , prod    :: Name+                    , lhsNt   :: Nonterminal+                    , lhsFld  :: Name+                    , lhsAttr :: Name+                    , rhsFld  :: Name+                    , rhsAttr :: Name } deriving Show++type Trace = [TraceElem]++getTrace :: UsedAttr -> Trace+getTrace (Loc _ _ trace) = trace+getTrace (Glo   _ trace) = trace++toPair :: UsedAttr -> (Name,Trace)+toPair (Loc _ attr trace) = (attr,trace)+toPair (Glo   attr trace) = (attr,trace)++-- de Eq op Res negeert de trace, want dit is geen onderdeel van het resultaat, maar een oorzaak ervan.+-- hierdoor kan gewoon de elem functie op sets van resultaten gebruikt worden.+instance Eq UsedAttr where+ Loc fld1 attr1 _ == Loc fld2 attr2 _ = fld1==fld2 && attr1==attr2+ Glo      attr1 _ == Glo      attr2 _ = attr1==attr2+ _                == _                = False++instance Show UsedAttr where+ show (Loc fld attr trace) = "(" ++ show fld ++ "," ++ show attr ++ ")"+ show (Glo attr trace) = show attr++instance HasAttrAndField UsedAttr where+ getAttr (Loc _ attr _) = attr+ getAttr (Glo attr _) = attr+ getField (Loc fld attr _) = fld+ getField _ = nullIdent++instance ContainsTrace UsedAttr where+ addTraceElem newtre (Loc fld attr oldtr) = Loc fld attr (newtre:oldtr)+ addTraceElem newtre (Glo     attr oldtr) = Glo     attr (newtre:oldtr)+ addTrace newtr (Loc fld attr oldtr) = Loc fld attr (newtr++oldtr)+ addTrace newtr (Glo     attr oldtr) = Glo     attr (newtr++oldtr)++instance ContainsTrace Result where+ addTraceElem newcs (set,upd) = (map (addTraceElem newcs) set,map (addTraceElem newcs) upd)+ addTrace newcss (set,upd) = (map (addTrace newcss) set,map (addTrace newcss) upd)++instance ContainsTrace Stream where+ addTraceElem newcs stream = map (addTraceElem newcs) stream+ addTrace newcss stream = map (addTrace newcss) stream
+ src/GrammarInfo.hs view
@@ -0,0 +1,52 @@+module GrammarInfo where++import SequentialTypes+import CodeSyntax+import Data.Map(Map)+import qualified Data.Map as Map+import Data.Set(Set)+import qualified Data.Set as Set+import CommonTypes+import Data.List(intersect,(\\))++type LMH = (Vertex,Vertex,Vertex)+data Info = Info  {  tdpToTds    ::  Table Vertex+                  ,  tdsToTdp    ::  Table [Vertex]+                  ,  attrTable   ::  Table NTAttr+                  ,  ruleTable   ::  Table CRule+                  ,  lmh         ::  [LMH]+                  ,  prods       ::  [(Nonterminal,[Constructor])]+                  ,  wraps       ::  Set Nonterminal+                  }+                  deriving Show++instance Show CRule+ where show (CRule name isIn hasCode nt con field childnt tp pattern rhs defines owrt origin uses) +         = "CRule " ++ show name ++ " nt: " ++ show nt ++ " con: " ++ show con ++ " field: " ++ show field+         ++ " childnt: " ++ show childnt ++ " rhs: " ++ concat rhs ++ " uses: " ++ show [ attrname True fld nm | (fld,nm) <- Set.toList uses ]++type CInterfaceMap = Map Nonterminal CInterface+type CVisitsMap = Map Nonterminal (Map Constructor CVisits)++data CycleStatus  +  = CycleFree     CInterfaceMap CVisitsMap+  | LocalCycle    [Route]+  | InstCycle     [Route]+  | DirectCycle   [EdgeRoutes]+  | InducedCycle  CInterfaceMap [EdgeRoutes] ++showsSegment :: CSegment -> [String]+showsSegment (CSegment inh syn)+   = let syn'     = map toString (Map.toList syn)+         inh'     = map toString (Map.toList inh)+         toString (a,t) = (getName a, case t of (NT nt) -> getName nt; Haskell t -> t)+         chnn     = inh' `intersect` syn'+         inhn     = inh' \\ chnn+         synn     = syn' \\ chnn+         disp name [] = []+         disp name as =  (name ++ if length as == 1 then " attribute:" else " attributes:") :+                         map (\(x,y) -> ind x ++ replicate ((20 - length x) `max` 0) ' ' ++ " : " ++ y) as+     in  disp "inherited" inhn +         ++ disp "chained" chnn+         ++ disp "synthesized" synn+
+ src/HsTokenScanner.hs view
@@ -0,0 +1,160 @@++module HsTokenScanner where+import HsToken+import UU.Scanner.Position+import List(sort)+import UU.Util.BinaryTrees+import CommonTypes+import Maybe+import Char+isAGesc c = c == '@'++lexTokens :: Pos -> String -> [HsToken]+lexTokens =  scanTokens keywordstxt keywordsops specialchars opchars+  where keywordstxt   =  []+        keywordsops   =  [".","=", ":=", ":","|","@"]+        specialchars  =  ";()[],_{}`"+        opchars       =  "!#$%&*+./<=>?@\\^|-~:"+++scanTokens :: [String] -> [String] -> String -> String -> Pos -> String -> [HsToken]+scanTokens keywordstxt keywordsops specchars opchars  pos input+  = doScan pos input++ where+   locatein :: Ord a => [a] -> a -> Bool+   locatein es = isJust . btLocateIn compare (tab2tree (sort es))+   iskw     = locatein keywordstxt+   isop     = locatein keywordsops+   isSymbol = locatein specchars+   isOpsym  = locatein opchars++   isIdStart c = isLower c || c == '_'++   isIdChar c =  isAlphaNum c+              || c == '\''+              || c == '_'++   scanIdent p s = let (name,rest) = span isIdChar s+                   in (name,advc (length name) p,rest)++   doScan p []      = []+   doScan p (c:s)   | isSpace c = let (sp,next) = span isSpace s+                                 in  doScan (foldl (flip updPos)  p (c:sp)) next+   doScan p (c:d:s) | isAGesc c && isIdStart d =+                                 let (fld,p2,rest) = scanIdent (advc 2 p) s+                                     field = d:fld+                                 in case rest of+                                      ('.':r:rs) +                                          | isIdStart r -> let (at,p3,rest2) = scanIdent (advc 2 p2) rs+                                                               attr = r : at+                                                           in AGField (Ident field p) (Ident attr p) p : doScan p3 rest2+                                      _                 -> AGLocal (Ident field p) p : doScan p2 rest++   doScan p ('-':'-':s)  = doScan p (dropWhile (/= '\n') s)+   doScan p ('{':'-':s)  = advc' 2 p (lexNest doScan) s   -- }+   doScan p ('"':ss)+     = let (s,swidth,rest) = scanString ss+       in if null rest || head rest /= '"'+             then Err "Unterminated string literal" p : advc' swidth p doScan rest+             else StrToken s p : advc' (swidth+2) p doScan (tail rest)++   doScan p ('\'':ss)+     = let (mc,cwidth,rest) = scanChar ss+       in case mc of+            Nothing -> Err "Error in character literal" p : advc' cwidth p doScan rest+            Just c  -> if null rest || head rest /= '\''+                          then Err "Unterminated character literal" p : advc' (cwidth+1) p doScan rest+                          else CharToken  [c] p : advc' (cwidth+2) p doScan (tail rest)+   doScan p cs@(c:s)++     | isIdStart c || isUpper c+         = let (name', p', s')    = scanIdent (advc 1 p) s+               name               = c:name'+               tok                = if iskw name+                                    then HsToken name p               -- keyword+                                    else if null name' && isSymbol c+                                    then HsToken [c] p                -- '_'+                                    else HsToken name p               -- varid / conid+           in tok : doScan p' s'+     | isOpsym c = let (name, s') = span isOpsym cs+                       tok | isop name = HsToken name p+                           | otherwise = HsToken name p+                   in tok : doScan (foldl (flip updPos)  p name)  s'+     | isDigit c = let (base,digs,width,s') = getNumber cs+                       number = case base of+                          8  -> "0o"++digs+                          10 -> digs+                          16 -> "0x"++digs+                   in  HsToken number p : advc' width p doScan s'+     | isSymbol c = HsToken [c] p : advc' 1 p doScan s+     | otherwise = Err ("Unexpected character " ++ show c) p : updPos'  c p doScan s+++lexNest cont pos inp = lexNest' cont pos inp+ where lexNest' c p ('{':'-':s) = lexNest' (lexNest' c) (advc 2 p) s+       lexNest' c p ('-':'}':s) = c (advc 2 p) s+       lexNest' c p (x:s)       = lexNest' c (updPos  x p) s+       lexNest' _ _ []          = [Err "Unterminated nested comment" pos]+++scanString []            = ("",0,[])+scanString ('\\':'&':xs) = let (str,w,r) = scanString xs+                           in (str,w+2,r)+scanString ('\'':xs)     = let (str,w,r) = scanString xs+                           in ('\'': str,w+1,r)+scanString xs = let (ch,cw,cr) = getchar xs+                    (str,w,r)  = scanString cr+                    str' = maybe "" (:str) ch+                in maybe ("",0,xs) (\c -> (c:str,cw+w,r)) ch++scanChar ('"' :xs) = (Just '"',1,xs)+scanChar xs        = getchar xs++getchar []          = (Nothing,0,[])+getchar s@('\n':_ ) = (Nothing,0,s )+getchar s@('\t':_ ) = (Nothing,0,s)+getchar s@('\'':_ ) = (Nothing,0,s)+getchar s@('"' :_ ) = (Nothing,0,s)+getchar   ('\\':xs) = let (c,l,r) = getEscChar xs+                      in (c,l+1,r)+getchar (x:xs)      = (Just x,1,xs)++getEscChar [] = (Nothing,0,[])+getEscChar s@(x:xs) | isDigit x = let (base,n,len,rest) = getNumber s+                                      val = readn base  n+                                  in  if val >= 0 && val <= 255+                                         then (Just (chr val),len, rest)+                                         else (Nothing,1,rest)+                    | otherwise = case x `lookup` cntrChars of+                                 Nothing -> (Nothing,0,s)+                                 Just c  -> (Just c,1,xs)+  where cntrChars = [('a','\a'),('b','\b'),('f','\f'),('n','\n'),('r','\r'),('t','\t')+                    ,('v','\v'),('\\','\\'),('"','\"'),('\'','\'')]++readn base n = foldl (\r x  -> value x + base * r) 0 n++getNumber cs@(c:s)+  | c /= '0'               = num10+  | null s                 = const0+  | hs == 'x' || hs == 'X' = num16+  | hs == 'o' || hs == 'O' = num8+  | otherwise              = num10+  where (hs:ts) = s+        const0 = (10, "0",1,s)+        num10  = let (n,r) = span isDigit cs+                 in (10,n,length n,r)+        num16   = readNum isHexaDigit  ts 16+        num8    = readNum isOctalDigit ts 8+        readNum p ts tk+          = let nrs@(n,rs) = span p ts+            in  if null n then const0+                          else (tk         , n, 2+length n,rs)++isHexaDigit  d = isDigit d || (d >= 'A' && d <= 'F') || (d >= 'a' && d <= 'f')+isOctalDigit d = d >= '0' && d <= '7'++value c | isDigit c = ord c - ord '0'+        | isUpper c = ord c - ord 'A' + 10+        | isLower c = ord c - ord 'a' + 10+
+ src/Options.hs view
@@ -0,0 +1,197 @@+module Options where++import System.Console.GetOpt++options     :: [OptDescr (Options -> Options)]+options     =  [ Option ['m']     []                (NoArg (moduleOpt Nothing)) "generate default module header"+               , Option []        ["module"]        (OptArg moduleOpt "name")   "generate module header, specify module name"+               , Option ['d']     ["data"]          (NoArg dataOpt)             "generate data type definition"+               , Option []        ["strictdata"]    (NoArg strictDataOpt)       "generate strict data fields (when data is generated)"+               , Option []        ["strictwrap"]    (NoArg strictWrapOpt)       "generate strict wrap fields for WRAPPER generated data"+               , Option ['c']     ["catas"]         (NoArg cataOpt)             "generate catamorphisms"+               , Option ['f']     ["semfuns"]       (NoArg semfunsOpt)          "generate semantic functions"+               , Option ['s']     ["signatures"]    (NoArg signaturesOpt)       "generate signatures for semantic functions"+               , Option []        ["newtypes"]      (NoArg newtypesOpt)         "use newtypes instead of type synonyms"+               , Option ['p']     ["pretty"]        (NoArg prettyOpt)           "generate pretty printed list of attributes"+               , Option ['w']     ["wrappers"]      (NoArg wrappersOpt)         "generate wappers for semantic domains"+               , Option ['r']     ["rename"]        (NoArg renameOpt)           "rename data constructors"+               , Option []        ["modcopy"]       (NoArg modcopyOpt)          "use modified copy rule"+               , Option []        ["nest"]          (NoArg nestOpt)             "use nested tuples"+               , Option []        ["syntaxmacro"]   (NoArg smacroOpt)           "experimental: generate syntax macro code (using knit catas)"+               , Option ['o']     ["output"]        (ReqArg outputOpt "file")   "specify output file"+               , Option ['v']     ["verbose"]       (NoArg verboseOpt)          "verbose error message format"+               , Option ['h','?'] ["help"]          (NoArg helpOpt)             "get (this) usage information"+               , Option ['a']     ["all"]           (NoArg allOpt)             ("do everything (-" ++ allc ++ ")")+               , Option ['P']     [""]              (ReqArg searchPathOpt "search path") ("specify seach path")+               , Option []        ["prefix"]        (ReqArg prefixOpt "prefix") "set prefix for semantic functions"+               , Option []        ["self"]          (NoArg selfOpt)             "generate self attribute"+               , Option []        ["cycle"]         (NoArg cycleOpt)            "check for cyclic definitions"+               , Option []        ["version"]       (NoArg versionOpt)          "get version information"+               , Option ['O']     ["optimize"]      (NoArg optimizeOpt)         "optimize generated code (--visit --case)"+               , Option []        ["visit"]         (NoArg visitOpt)            "try generating visit functions"+               , Option []        ["seq"]           (NoArg seqOpt)              "force evaluation using function seq (visit functions only)"+               , Option []        ["unbox"]         (NoArg unboxOpt)            "use unboxed tuples"+               , Option []        ["bangpats"]      (NoArg bangpatsOpt)         "use bang patterns (visit functions only)"+               , Option []        ["case"]          (NoArg casesOpt)            "Use nested cases instead of let (visit functions only)"+               , Option []        ["strictcase"]    (NoArg strictCasesOpt)      "Force evaluation of the scrutinee of cases (in generated code, visit functions only)"+               , Option []        ["strictercase"]  (NoArg stricterCasesOpt)      "Force evaluation of all variables bound by a case statement (in generated code)"+               , Option []        ["strictsem"]     (NoArg strictSemOpt)        "Force evaluation of sem-function arguments (in generated code)"+               , Option []        ["localcps"]      (NoArg localCpsOpt)         "Apply a local CPS transformation (in generated code, visit functions only)"+               , Option []        ["splitsems"] (NoArg splitSemsOpt)    "Split semantic functions into smaller pieces"+               , Option []        ["Werrors"]       (NoArg werrorsOpt)          "Turn warnings into fatal errors"+               , Option []        ["Wignore"]       (NoArg wignoreOpt)          "Ignore warnings"+               , Option []        ["Wmax"]          (ReqArg wmaxErrsOpt "<max errs reported>") "Sets the maximum number of errors that are reported"+               , Option []        ["dumpgrammar"]   (NoArg dumpgrammarOpt)      "Dump internal grammar representation (in generated code)"+               , Option []        ["dumpcgrammar"]  (NoArg dumpcgrammarOpt)      "Dump internal cgrammar representation (in generated code)"+               , Option []        ["gentraces"]     (NoArg genTracesOpt)        "Generate trace expressions (in generated code)"+               , Option []        ["gencostcentres"] (NoArg genCostCentresOpt)  "Generate cost centre pragmas (in generated code)"+               , Option []        ["genlinepragmas"] (NoArg genLinePragmasOpt)  "Generate GHC LINE pragmas (in generated code)"+               , Option []        ["sepsemmods"]    (NoArg sepSemModsOpt)       "Generate separate modules for semantic functions (in generated code)"+               , Option ['M']     ["genfiledeps"] (NoArg genFileDepsOpt) "Generate a list of dependencies on the input AG files"+               ]++allc = "dcfsprm"++data Options = Options{ moduleName :: ModuleHeader +                      , dataTypes :: Bool+                      , strictData :: Bool+                      , strictWrap :: Bool+                      , folds :: Bool+                      , semfuns :: Bool+                      , typeSigs :: Bool+                      , attrInfo :: Bool+                      , rename :: Bool+                      , wrappers :: Bool+                      , modcopy :: Bool+                      , newtypes :: Bool+                      , nest :: Bool+                      , smacro :: Bool+                      , outputFiles :: [String]+                      , searchPath :: [String]+                      , verbose :: Bool+                      , prefix :: String+                      , withSelf :: Bool+                      , withCycle :: Bool+                      , showHelp :: Bool+                      , showVersion :: Bool+                      , visit :: Bool+                      , withSeq :: Bool+                      , unbox :: Bool+                      , bangpats :: Bool+                      , cases :: Bool+                      , strictCases :: Bool+                      , stricterCases :: Bool+                      , strictSems :: Bool+                      , localCps :: Bool+                      , splitSems :: Bool+                      , werrors :: Bool+                      , wignore :: Bool+                      , wmaxerrs :: Int+                      , dumpgrammar :: Bool+                      , dumpcgrammar :: Bool+                      , genTraces :: Bool+                      , genCostCentres :: Bool+                      , sepSemMods :: Bool+                      , genFileDeps :: Bool+                      , genLinePragmas :: Bool+                      } deriving Show+noOptions = Options { moduleName    = NoName+                    , dataTypes     = False+                    , strictData    = False+                    , strictWrap    = False+                    , folds         = False+                    , semfuns       = False+                    , typeSigs      = False+                    , attrInfo      = False+                    , rename        = False+                    , wrappers      = False+                    , modcopy       = False+                    , newtypes      = False+                    , nest          = False+                    , smacro        = False+                    , outputFiles   = []+                    , searchPath    = []+                    , verbose       = False+                    , showHelp      = False+                    , showVersion   = False+                    , prefix        = "sem_"+                    , withSelf      = False+                    , withCycle     = False+                    , visit         = False+                    , withSeq       = False+                    , unbox         = False+                    , bangpats      = False+                    , cases         = False+                    , strictCases   = False+                    , stricterCases = False+                    , strictSems    = False+                    , localCps      = False+                    , splitSems     = False+                    , werrors       = False+                    , wignore       = False+                    , wmaxerrs      = 99999+                    , dumpgrammar   = False+                    , dumpcgrammar  = False+                    , genTraces     = False+                    , genCostCentres = False+                    , sepSemMods     = False+                    , genFileDeps    = False+                    , genLinePragmas = False+                    }+++moduleOpt  nm   opts = opts{moduleName   = maybe Default Name nm}            +dataOpt         opts = opts{dataTypes    = True}            +strictDataOpt   opts = opts{strictData   = True}            +strictWrapOpt   opts = opts{strictWrap   = True}            +cataOpt         opts = opts{folds        = True}            +semfunsOpt      opts = opts{semfuns      = True}            +signaturesOpt   opts = opts{typeSigs     = True}            +prettyOpt       opts = opts{attrInfo     = True}            +renameOpt       opts = opts{rename       = True}+wrappersOpt     opts = opts{wrappers     = True}+modcopyOpt      opts = opts{modcopy      = True}+newtypesOpt     opts = opts{newtypes     = True}+nestOpt         opts = opts{nest         = True}+smacroOpt       opts = opts{smacro       = True}+verboseOpt      opts = opts{verbose      = True}            +helpOpt         opts = opts{showHelp     = True}            +versionOpt      opts = opts{showVersion  = True}            +prefixOpt pre   opts = opts{prefix       = pre }            +selfOpt         opts = opts{withSelf     = True}            +cycleOpt        opts = opts{withCycle    = True}            +visitOpt        opts = opts{visit        = True, withCycle = True}+seqOpt          opts = opts{withSeq      = True}+unboxOpt        opts = opts{unbox        = True}+bangpatsOpt     opts = opts{bangpats     = True}+casesOpt        opts = opts{cases        = True}+strictCasesOpt  opts = opts{strictCases  = True}+stricterCasesOpt opts = opts{strictCases = True, stricterCases = True}+strictSemOpt    opts = opts{strictSems   = True}+localCpsOpt     opts = opts{localCps     = True}+splitSemsOpt    opts = opts{splitSems    = True}+werrorsOpt      opts = opts{werrors      = True}+wignoreOpt      opts = opts{wignore      = True}+wmaxErrsOpt n   opts = opts{wmaxerrs     = read n}+dumpgrammarOpt  opts = opts{dumpgrammar  = True}+dumpcgrammarOpt opts = opts{dumpcgrammar = True}+genTracesOpt    opts = opts{genTraces    = True}+genCostCentresOpt opts = opts{genCostCentres = True}+sepSemModsOpt opts = opts{sepSemMods = True}+genFileDepsOpt opts = opts{genFileDeps = True}+genLinePragmasOpt opts = opts{genLinePragmas = True}++outputOpt  file  opts = opts{outputFiles  = file : outputFiles opts}            +searchPathOpt  path  opts = opts{searchPath  = extract path ++ searchPath opts}            +  where extract xs = let (p,ps) = break (\x -> x == ';' || x == ':') xs+                     in if null p then [] else p : extract ps+allOpt = moduleOpt Nothing . dataOpt . cataOpt . semfunsOpt . signaturesOpt . prettyOpt . renameOpt+optimizeOpt   = visitOpt . casesOpt++getOptions args = let (flags,files,errors) = getOpt Permute options args+                  in (foldl (flip ($)) noOptions flags,files,errors)++data ModuleHeader  = NoName+                   | Name String+                   | Default deriving Show+
+ src/PPUtil.hs view
@@ -0,0 +1,51 @@+module PPUtil where++--+-- Some additional pretty-print functions+-- for pretty-printing abstract syntax trees.+--++import Data.List+import qualified Data.Map as Map+import Pretty++ppListSep :: (PP s, PP c, PP o, PP a) => o -> c -> s -> [a] -> PP_Doc+ppListSep o c s pps = o >|< hlist (intersperse (pp s) (map pp pps)) >|< c++ppSpaced :: PP a => [a] -> PP_Doc+ppSpaced = ppListSep "" "" " "++ppCommas :: PP a => [a] -> PP_Doc+ppCommas = ppListSep "" "" ", "++ppVList :: PP a => [a] -> PP_Doc+ppVList = pp_block "[ " "] " ", " . map pp++ppMap :: (Show a, Show b) => Map.Map a b -> PP_Doc+ppMap m = ppVList [ ppF (show k) $ ppShow v | (k,v) <- Map.toList m ]++ppAssocL :: (Show a, Show b) => [(a,b)] -> PP_Doc+ppAssocL m = ppVList [ ppF (show k) $ ppShow v | (k,v) <- m ]++ppF :: String -> PP_Doc -> PP_Doc+ppF s x = s >|< ":" >#< x++ppNest :: PP a => [a] -> [PP_Doc] -> [PP_Doc] -> PP_Doc+ppNest nms attrs ps = ppNestInfo {- defaultEHCOpts -} nms attrs ps []++ppNestInfo :: PP a => {- EHCOpts -> -} [a] -> [PP_Doc] -> [PP_Doc] -> [(String,PP_Doc)] -> PP_Doc+ppNestInfo {- opts -} nms attrs ps infos+  = ppListSep "" "" "_" nms+    >#< (   (if null attrs then empty else ppSpaced attrs)+        >-< (if False {- ehcOptDebug opts -} then vlist (map (\(i,p) -> pp i >|< ":" >#< p) infos) else empty)+        )+    >-< indent 2 (vlist ps)++ppNm :: String -> PP_Doc+ppNm = text . show++ppShow :: Show x => x -> PP_Doc+ppShow x = pp $ show x++mkInfo1 :: String -> PP_Doc -> (String,PP_Doc)+mkInfo1 = (,)
+ src/Parser.hs view
@@ -0,0 +1,369 @@+module Parser --(parseAG)
+where
+import Data.Maybe
+import UU.Parsing
+import UU.Parsing.Machine(RealParser(..),RealRecogn(..),anaDynE,mkPR)
+import ConcreteSyntax
+import CommonTypes
+import Patterns
+import UU.Pretty(text,PP_Doc,empty,(>-<))
+import TokenDef
+import List (intersperse)
+import Char
+import Scanner (Input(..),scanLit,input)
+import List
+import Expression
+import UU.Scanner.Token
+import UU.Scanner.TokenParser
+import UU.Scanner.GenToken
+import UU.Scanner.GenTokenParser
+import UU.Scanner.Position
+import UU.Scanner.TokenShow()
+import System.Directory
+
+
+type AGParser = AnaParser Input  Pair Token Pos
+
+pIdentifier, pIdentifierU :: AGParser Identifier
+pIdentifierU = uncurry Ident <$> pConidPos
+pIdentifier   = uncurry Ident <$> pVaridPos
+
+
+parseAG :: [FilePath] -> String -> IO (AG,[Message Token Pos])
+parseAG  searchPath file 
+              = do (es,_,_,mesg) <- parseFile searchPath file
+                   return (AG es, mesg)++depsAG :: [FilePath] -> String -> IO ([String], [Message Token Pos])+depsAG searchPath file+  = do (_,_,fs,mesgs) <- parseFile searchPath file+       return (fs, mesgs)
+
+parseFile :: [FilePath] -> String -> IO  ([Elem],[String],[String],[Message Token Pos ])
+parseFile searchPath file 
+               = do txt <- readFile file
+                    let litMode = ".lag" `isSuffixOf` file
+                        (files,text) = if litMode then scanLit txt
+                                       else ([],txt)
+                        tokens       = input (initPos file) text
+
+                        steps = parse pElemsFiles tokens
+                        stop (_,fs,_,_) = null fs
+                        cont (es,fs,allfs,msg)+                          = do files <- mapM (resolveFile searchPath) fs
+                               res <- mapM (parseFile searchPath) files
+                               let (ess,fss,allfss, msgs) = unzip4 res+                               return (es ++ concat ess, concat fss, concat allfss ++ allfs, msg ++ concat msgs)
+                    let (Pair (es,fls) _ ,mesg) = evalStepsMessages steps+                    let allfs = files ++ fls
+                    loopp stop cont (es,allfs,allfs,mesg)
+
+resolveFile :: [FilePath] -> FilePath -> IO FilePath
+resolveFile path fname = search (path ++ ["."])                                                  
+ where search (p:ps) = do dExists <- doesDirectoryExist p
+                          if dExists
+                             then do let filename = p++pathSeparator++fname
+                                     fExists <- doesFileExist filename
+                                     if fExists
+                                        then return filename
+                                        else search ps      
+                             else search ps
+       search []     = error ("File: " ++ show fname ++ " not found in search path: " ++ show (concat (intersperse ";" (path ++ ["."]))) )                      
+
+pathSeparator = "/"
+
+evalStepsMessages :: (Eq s, Show s, Show p) => Steps a s p -> (a,[Message s p])
+evalStepsMessages steps = case steps of
+  OkVal v        rest -> let (arg,ms) = evalStepsMessages rest
+                         in (v arg,ms)
+  Ok             rest -> evalStepsMessages rest
+  Cost  _        rest -> evalStepsMessages rest
+  StRepair _ msg rest -> let (v,ms) = evalStepsMessages rest
+                         in (v, msg:ms)
+  Best _   rest   _   -> evalStepsMessages rest
+  NoMoreSteps v       -> (v,[])
+
+loopp ::(a->Bool) -> (a->IO a) -> a ->  IO a
+loopp pred cont x | pred x = return x
+                  | otherwise = do x' <- cont x
+                                   loopp pred cont x'
+                                  
+pElemsFiles :: AGParser ([Elem],[String])
+pElemsFiles = pFoldr (($),([],[])) pElem'
+   where pElem' =  addElem <$> pElem
+               <|> pINCLUDE *> (addInc <$> pStringPos)
+         addElem e      (es,fs) = (e:es,   fs)
+         addInc  (fn,_) (es,fs) = (  es,fn:fs)
+
+pCodescrapL = (\(ValToken _ str pos) -> (str, pos))<$>
+            parseScrapL  <?> "a code block"
+
+parseScrapL :: AGParser Token
+parseScrapL = let p acc =  (\k (Input pos str next) ->
+                            let (sc,rest) = case next of
+                                  Just (t@(ValToken TkTextln _ _), rs) -> (t,rs)
+                                  _ -> let (tok,p2,inp2) = codescrapL pos str
+                                       in (tok, input p2 inp2)
+                                steps   = k ( rest)
+                            in  (val (acc sc)  steps)
+                       )
+              in anaDynE  (mkPR (P (p  ), R (p (const id))))
+
+codescrapL p []                 = (valueToken TkTextln "" p,p,[])
+codescrapL p (x:xs) | isSpace x = (updPos'  x p)  codescrapL xs
+                    | otherwise = let refcol = column p
+                                      (p',sc,rest) = scrapL refcol p  (x:xs)
+                                  in (valueToken TkTextln sc p,p',rest)
+
+scrapL ref p (x:xs) | isSpace x || column p >= ref =
+                          let (p'',sc,inp) = updPos'  x p (scrapL ref)  xs
+                          in  (p'',x:sc,inp)
+                    | otherwise       =(p,[],x:xs)
+scrapL ref p []     = (p,[],[])
+
+pNontSet = set0
+  where set0 = pChainr (Intersect <$ pIntersect) set1
+        set1 = pChainl (Difference <$ pMinus) set2
+        set2 = pChainr (pSucceed Union) set3
+        set3 = pIdentifierU <**> opt (flip Path <$ pArrow <*> pIdentifierU) NamedSet 
+            <|> All <$ pStar
+            <|> pParens set0
+
+pNames :: AGParser [Name]
+pNames = pList1 pIdentifier
+
+pAG  :: AGParser AG
+pAG  = AG <$> pElems
+
+pElems :: AGParser Elems
+pElems = pList_ng pElem
+
+pComplexType =  List <$> pBracks pType 
+            <|> Maybe <$ pMAYBE <*> pType
+            <|> tuple <$> pParens (pListSep pComma field)
+ where field = (,) <$> ((Just <$> pIdentifier <* pColon) `opt` Nothing) <*> pType
+       tuple xs = Tuple [(fromMaybe (Ident ("x"++show n) noPos) f, t) 
+                        | (n,(f,t)) <- zip [1..] xs
+                        ]
+pElem :: AGParser Elem
+pElem =  Data <$> pDATA
+              <*> pNontSet
+              <*> pOptAttrs
+              <*> pAlts
+             <*> pSucceed False
+     <|> Attr <$> pATTR
+              <*> pNontSet
+              <*> pAttrs
+     <|> Type <$> pTYPE
+              <*> pIdentifierU
+              <*  pEquals
+              <*> pComplexType
+     <|> Sem  <$> pSEM
+              <*> pNontSet
+              <*> pOptAttrs
+              <*> pSemAlts
+     <|> Set  <$> pSET
+              <*> pIdentifierU
+              <*  pEquals
+              <*> pNontSet
+     <|> Deriving
+              <$> pDERIVING
+              <*> pNontSet
+              <*  pColon
+              <*> pListSep pComma pIdentifierU
+     <|> Wrapper
+              <$> pWRAPPER
+              <*> pNontSet
+     <|> Pragma
+              <$> pPRAGMA
+              <*> pNames+     <|> Module+              <$> pMODULE+              <*> pCodescrap'+              <*> pCodescrap'+              <*> pCodescrap'+     <|> codeBlock <$> (pIdentifier <|> pSucceed (Ident "" noPos)) <*> pCodeBlock <?> "a statement"
+           where codeBlock nm (txt,pos) = Txt pos nm (lines txt)++-- Insertion is expensive for pCodeBlock in order to prevent infinite inserts.
+pCodeBlock ::  AGParser (String,Pos)
+pCodeBlock   = pCostValToken 90 TkTextln "" <?> "a code block"
+
+
+pAttrs :: AGParser Attrs
+pAttrs = Attrs <$> pOBrackPos <*> (concat <$> pList pInhAttrNames <?> "inherited attribute declarations")
+                              <* pBar    <*> (concat <$> pList pAttrNames <?> "chained attribute declarations"  )
+                              <* pBar    <*> (concat <$> pList pAttrNames <?> "synthesised attribute declarations"  )
+               <*  pCBrack
+
+pOptAttrs :: AGParser Attrs
+pOptAttrs = pAttrs `opt` Attrs noPos [] [] []
+
+pType :: AGParser Type
+pType =  NT <$> pIdentifierU
+     <|> Haskell <$> pCodescrap'  <?> "a type"
+
+
+pInhAttrNames :: AGParser AttrNames
+pInhAttrNames   = (\vs tp -> map (\v -> (v,tp,("","",""))) vs)
+                  <$> pIdentifiers <*  pColon <*> pType <?> "attribute declarations"
+
+pIdentifiers :: AGParser [Identifier]
+pIdentifiers =  pList1Sep pComma pIdentifier <?> "lowercase identifiers"
+
+
+pAttrNames :: AGParser AttrNames
+pAttrNames = (\vs use tp -> map (\v -> (v,tp,use)) vs)
+             <$> pIdentifiers <*> pUse <* pColon <*> pType <?> "attribute declarations"
+
+pUse :: AGParser (String,String,String)
+pUse = (  (\u x y->(x,y,show u)) <$> pUSE <*> pCodescrap'  <*> pCodescrap')` opt` ("","","") <?> "USE declaration"
+
+pAlt :: AGParser Alt
+pAlt =  Alt <$> pBar <*> pSimpleConstructorSet <*> pFields <?> "a datatype alternative"
+
+pAlts :: AGParser Alts
+pAlts =  pList_ng pAlt <?> "datatype alternatives"
+
+pFields    :: AGParser Fields
+pFields    = concat <$> pList_ng pField <?> "fields"
+
+pField     :: AGParser Fields
+pField     =  (\nms tp -> map (flip (,) tp) nms)
+           <$> pIdentifiers <* pColon <*> pType
+           <|> (\s -> [(Ident (mklower (getName s)) (getPos s) ,NT s)]) <$> pIdentifierU
+
+mklower :: String -> String
+mklower (x:xs) = toLower x : xs
+mklower []     = []
+
+pSemAlt :: AGParser SemAlt
+pSemAlt  = SemAlt
+          <$> pBar <*> pConstructorSet <*> pSemDefs <?> "SEM alternative"
+
+pSimpleConstructorSet :: AGParser ConstructorSet
+pSimpleConstructorSet =  CName <$> pIdentifierU
+                     <|> CAll  <$  pStar
+                     <|> pParens pConstructorSet
+
+pConstructorSet :: AGParser ConstructorSet
+pConstructorSet =  pChainl (CDifference <$ pMinus) term2
+  where term2 =  pChainr (pSucceed CUnion) term1
+        term1 =  CName <$> pIdentifierU
+             <|> CAll  <$  pStar
+               
+
+pSemAlts :: AGParser SemAlts
+pSemAlts =  pList pSemAlt <?> "SEM alternatives"
+
+pFieldIdentifier =  pIdentifier 
+                <|> Ident "lhs"  <$> pLHS 
+                <|> Ident "loc"  <$> pLOC+                <|> Ident "inst" <$> pINST
+
+pSemDef :: AGParser [SemDef]
+pSemDef = (\x fs -> map ($ x) fs)<$> pFieldIdentifier <*> pList1 pAttrDef
+      <|>                            pLOC              *> pList1 pLocDecl+      <|>                            pINST             *> pList1 pInstDecl+      <|>  pSEMPRAGMA *> pList1 (SemPragma <$> pNames)+      <|> (\a b -> [AttrOrderBefore a b]) <$> pAttr <* pSmaller <*> pAttr+      <|> (\pat owrt exp -> [Def (pat ()) exp owrt]) <$> pPattern (const <$> pAttr) <*> pAssign <*> pExpr
+ 
+pAttr = (,) <$> pFieldIdentifier <* pDot <*> pIdentifier
+ 
+pAttrDef :: AGParser (Name -> SemDef)
+pAttrDef = (\pat owrt exp fld -> Def (pat fld) exp owrt)
+           <$ pDot <*> pattern <*> pAssign <*> pExpr
+  where pattern =  pPattern pVar
+               <|> (\a fld -> Alias fld a (Underscore noPos) []) <$> pIdentifier
+
+
+nl2sp :: Char -> Char
+nl2sp '\n' = ' '
+nl2sp '\r' = ' '
+nl2sp x = x
+
+pLocDecl :: AGParser SemDef
+pLocDecl =   (\ident tp -> TypeDef ident tp)
+              <$ pDot <*> pIdentifier <* pColon <*> pLocType++pLocType = (Haskell . getName) <$> pIdentifierU
+       <|> Haskell <$> pCodescrap'  <?> "a type"++pInstDecl :: AGParser SemDef+pInstDecl = (\ident tp -> TypeDef ident tp)+             <$ pDot <*> pIdentifier <* pColon <*> (NT <$> pIdentifierU)
+
+pSemDefs :: AGParser SemDefs
+pSemDefs =  concat <$> pList_ng pSemDef  <?> "attribute rules"
+
+pVar :: AGParser (Name -> (Name, Name))
+pVar = (\att fld -> (fld,att)) <$> pIdentifier
+
+ 
+pExpr :: AGParser Expression
+pExpr = (\(str,pos) ->  Expression pos str) <$> ( pCodescrapL  ) <?> "an expression"
+
+pAssign :: AGParser Bool
+pAssign =  False <$ pReserved "="
+       <|> True  <$ pReserved ":="
+       
+pAttrDefs :: AGParser (Name -> [SemDef])
+pAttrDefs = (\fs field -> map ($ field) fs) <$> pList1 pAttrDef  <?> "attribute definitions"
+
+pPattern :: AGParser (a -> (Name,Name)) -> AGParser (a -> Pattern)
+pPattern pvar = pPattern2 where
+  pPattern0 =  (\i pats a -> Constr i (map ($ a) pats))
+               <$> pIdentifierU <*> pList  pPattern1
+               <|> pPattern1 <?> "a pattern"
+  pPattern1 =  pvariable 
+           <|> pPattern2
+  pvariable = (\var pat a -> case var a of (fld,att) -> Alias fld att (pat a) []) 
+           <$> pvar <*> ((pAt *> pPattern1) `opt` const (Underscore noPos)) 
+  pPattern2 = (mkTuple <$> pOParenPos <*> pListSep pComma pPattern0 <* pCParen )
+          <|> (const . Underscore) <$> pUScore <?> "a pattern"
+    where mkTuple _ [x] a = x a
+          mkTuple p xs  a = Product p (map ($ a) xs)
+
+pCostSym' c t = pCostSym c t t
+
+pCodescrap' ::  AGParser String
+pCodescrap' = fst <$> pCodescrap
+
+pCodescrap ::  AGParser (String,Pos)
+pCodescrap   = pCodeBlock
+
+pSEM, pATTR, pDATA, pUSE, pLOC,pINCLUDE, pTYPE, pEquals, pColonEquals,
+      pBar, pColon, pLHS,pINST,pSET,pDERIVING,pMinus,pIntersect,pArrow,
+      pDot, pUScore, pEXT,pAt,pStar, pSmaller, pWRAPPER, pMAYBE, pMODULE
+      :: AGParser  Pos
+pSET         = pCostReserved 90 "SET"     <?> "SET"
+pDERIVING    = pCostReserved 90 "DERIVING"<?> "DERIVING"
+pWRAPPER     = pCostReserved 90 "WRAPPER" <?> "WRAPPER"
+pPRAGMA      = pCostReserved 90 "PRAGMA"  <?> "PRAGMA"+pSEMPRAGMA   = pCostReserved 90 "SEMPRAGMA" <?> "SEMPRAGMA"
+pDATA        = pCostReserved 90 "DATA"    <?> "DATA"
+pEXT         = pCostReserved 90 "EXT"     <?> "EXT"
+pATTR        = pCostReserved 90 "ATTR"    <?> "ATTR"
+pSEM         = pCostReserved 90 "SEM"     <?> "SEM"
+pINCLUDE     = pCostReserved 90 "INCLUDE" <?> "INCLUDE"
+pTYPE        = pCostReserved 90 "TYPE"    <?> "TYPE"
+pMAYBE       = pCostReserved 5  "MAYBE"   <?> "MAYBE"
+pUSE         = pCostReserved 5  "USE"     <?> "USE"
+pLOC         = pCostReserved 5  "loc"     <?> "loc"
+pLHS         = pCostReserved 5  "lhs"     <?> "loc"+pINST        = pCostReserved 5  "inst"    <?> "inst"
+pAt          = pCostReserved 5  "@"       <?> "@"
+pDot         = pCostReserved 5  "."       <?> "."
+pUScore      = pCostReserved 5  "_"       <?> "_"
+pColon       = pCostReserved 5  ":"       <?> ":"
+pEquals      = pCostReserved 5  "="       <?> "="
+pColonEquals = pCostReserved 5  ":="      <?> ":="
+pBar         = pCostReserved 5  "|"       <?> "|"
+pIntersect   = pCostReserved 5  "/\\"     <?> "/\\"
+pMinus       = pCostReserved 5  "-"       <?> "-"
+pArrow       = pCostReserved 5  "->"      <?> "->"
+pStar        = pCostReserved 5  "*"       <?> "*"+pSmaller     = pCostReserved 5  "<"       <?> "<"+pMODULE      = pCostReserved 5  "MODULE"  <?> "MODULE"+
+ src/Pretty.hs view
@@ -0,0 +1,151 @@+{-# OPTIONS_GHC -fglasgow-exts #-}+-- Layer on top of the original UU.Pretty class+module Pretty+  ( (>|<)+  , (>-<)+  , (>#<)+  , text+  , empty+  , indent+  , pp_block+  , hlist+  , vlist+  , vlist_sep+  , fill+  , pp_parens+  , hv_sp+  , ppWithLineNr+  , disp+  , PP_Doc+  , PP (..)+  ) where++import qualified UU.Pretty as U+import Data.List(intersperse)+++--+-- Type classes and data types that mimic UU.Pretty+--++class Show a => PP a where+  pp :: a -> PP_Doc+  pp = text . show++  ppList :: [a] -> PP_Doc+  ppList as = if null as+              then empty+              else foldr (>|<) empty . map pp $ as++instance PP PP_Doc where+  pp = id++instance Show PP_Doc where+  show (PP_Doc f) = let (doc, _, _) = f 1+                    in show doc++instance PP String where+  pp = text++instance PP Char where+  pp = text . (\c -> [c])+++newtype PP_Doc = PP_Doc (Int -> (U.PP_Doc, Int, Bool))++fromInternal :: PP a => a -> Int -> (U.PP_Doc, Int, Bool)+fromInternal x l+  = let (PP_Doc f) = pp x+    in f l+++--+-- Layer on top of primitive combinators+--++infixr 3 >|<+infixr 2 >-<+infixr 3 >#<++(>|<) :: (PP a, PP b) => a -> b -> PP_Doc+x >|< y+  = PP_Doc $+      \l -> let (p, n, s) = fromInternal x l+                (q, m, t) = fromInternal y n+            in  (p U.>|< q, m, s && t)++(>-<) :: (PP a, PP b) => a -> b -> PP_Doc+x >-< y+  = PP_Doc $+      \l -> let (p, n, s) = fromInternal x l+                (q, m, t) = fromInternal y (if s then n else n+1)+             in (p U.>-< q, if t then m-1 else m, s && t)++text :: String -> PP_Doc+text s+  = let ls = lines s+        ls' | null ls   = [""]+            | otherwise = ls+    in vlist (map ppLine ls')+  where+    ppLine txt+      = PP_Doc $+          \l -> (U.text txt, l, False)++empty :: PP_Doc+empty+  = PP_Doc $+      \l -> (U.empty, l, True)+++--+-- Layer on top of the higher-level combinators+-- (shameless copy of their definition)+--++(>#<) :: (PP a, PP b) => a -> b -> PP_Doc+l >#< r = l >|< " " >|< r++hlist :: PP a => [a] -> PP_Doc+hlist = foldr (>|<) empty++vlist :: PP a => [a] -> PP_Doc+vlist = foldr (>-<) empty++vlist_sep :: (PP a, PP b) => a -> [b] -> PP_Doc+vlist_sep sep lst+  = vlist (intersperse (pp sep) (map pp lst))++pp_block:: (PP a, PP b, PP c) => a -> b -> c -> [PP_Doc] -> PP_Doc+pp_block o c s as = pp o >|< hlist (intersperse (pp s) as) >|< pp c++pp_parens :: PP a => a -> PP_Doc+pp_parens p = '(' >|< p >|< ')'+++--+-- Layer on top of the higher-level "smart" combinators+-- (dump alternative implementation)+--++indent :: PP a => Int -> a -> PP_Doc+indent n p = foldr (>#<) (pp p) (replicate n empty)++fill :: PP a => [a] -> PP_Doc+fill = foldr (>#<) empty++hv_sp :: PP a => [a] -> PP_Doc+hv_sp = foldr (>#<) empty+++-- Special combinator that exposes the line number+ppWithLineNr :: (Int -> PP_Doc) -> PP_Doc+ppWithLineNr f+  = PP_Doc $+      \l -> fromInternal (f l) l++-- Render function+disp :: PP a => a -> Int -> String -> String+disp p n = let (doc, _, _) = fromInternal (pp p) 1+            in U.disp doc n+
+ src/Scanner.hs view
@@ -0,0 +1,192 @@+
+module Scanner where
+import TokenDef
+import UU.Scanner.Position
+import UU.Scanner.Token
+import UU.Parsing(InputState(..),Either'(..))
+import Maybe
+import List
+import Char
+import UU.Scanner.GenToken
+
+data Input = Input !Pos String (Maybe (Token, Input))  
+
+instance InputState Input Token Pos where
+ splitStateE input@(Input _ _ next) = 
+                case next of
+                     Nothing         -> Right' input
+                     Just (s, rest)  -> Left' s rest
+ splitState (Input _ _ next) = 
+                case next of
+                     Nothing         -> error "splitState on empty input"
+                     Just (s, rest)  -> ( s, rest)
+ getPosition (Input pos _ next) =  case next of 
+                                    Just (s,_) -> position s
+                                    Nothing    -> pos -- end of file
+
+
+input :: Pos -> String -> Input
+input pos inp = Input pos 
+                      inp 
+                      (case scan pos inp of
+                             Nothing      -> Nothing
+                             Just (s,p,r) -> Just (s, input p r)
+                      )
+
+type Lexer s = Pos -> String -> Maybe (s,Pos,String)
+
+scan :: Lexer Token
+scan p []                        = Nothing
+scan p ('-':'-':xs)              = let (com,rest) = span (/= '\n') xs
+                                   in advc' (2+length com) p scan rest
+scan p ('{':'-':xs)              = advc' 2 p (ncomment scan) xs
+scan p ('{'    :xs)              = advc' 1 p codescrap xs
+scan p ('\CR':xs)                = case xs of
+                                    '\LF':ys -> newl' p scanBeginOfLine ys --ms newline
+                                    _        -> newl' p scanBeginOfLine xs --mac newline
+scan p ('\LF':xs)                =  newl' p scanBeginOfLine xs             --unix newline
+scan p (x:xs) | isSpace x        = updPos'  x p scan  xs
+scan p xs = Just (scan' xs)
+  where scan' ('.' :rs)          = (reserved "." p, advc 1 p, rs)
+        scan' ('@' :rs)          = (reserved "@" p, advc 1 p, rs)
+        scan' (',' :rs)          = (reserved "," p, advc 1 p, rs)
+        scan' ('_' :rs)          = (reserved "_" p, advc 1 p, rs)+        scan' ('<' :rs)          = (reserved "<" p, advc 1 p, rs)
+        scan' ('[' :rs)          = (reserved "[" p, advc 1 p, rs)
+        scan' (']' :rs)          = (reserved "]" p, advc 1 p, rs)
+        scan' ('(' :rs)          = (reserved "(" p, advc 1 p, rs)
+        scan' (')' :rs)          = (reserved ")" p, advc 1 p, rs)
+--        scan' ('{'    :rs)       = (OBrace      p, advc 1 p, rs)
+--        scan' ('}'    :rs)       = (CBrace      p, advc 1 p, rs)
+
+        scan' ('\"' :rs)         = let isOk c = c /= '"' && c /= '\n'
+                                       (str,rest) = span isOk rs
+                                   in if null rest || head rest /= '"'
+                                          then (errToken "unterminated string literal"   p
+                                               , advc (1+length str) p,rest)
+                                          else (valueToken TkString str p, advc (2+length str) p, tail rest)
+
+        scan' ('=' :rs)          = (reserved "=" p, advc 1 p, rs)
+        scan' (':':'=':rs)       = (reserved ":=" p, advc 2 p, rs)
+
+        scan' (':' :rs)          = (reserved ":" p, advc 1 p, rs)
+        scan' ('|' :rs)          = (reserved "|" p, advc 1 p, rs)
+
+        scan' ('/':'\\':rs)      = (reserved "/\\" p, advc 2 p, rs)
+        scan' ('-':'>' :rs)      = (reserved "->" p, advc 2 p, rs)
+        scan' ('-'     :rs)      = (reserved "-" p, advc 1 p, rs)
+        scan' ('*'     :rs)      = (reserved "*" p, advc 1 p, rs)
+
+        scan' (x:rs) | isLower x = let (var,rest) = ident rs
+                                       str        = (x:var)
+                                       tok | str `elem` keywords = reserved str
+                                           | otherwise           = valueToken TkVarid str
+                                   in (tok p, advc (length var+1) p, rest)
+                     | isUpper x = let (var,rest) = ident rs
+                                       str        = (x:var)
+                                       tok | str `elem` keywords = reserved str 
+                                           | otherwise           = valueToken TkConid str
+                                   in (tok p, advc (length var+1) p,rest)
+                     | otherwise = (errToken ("unexpected character " ++ show x) p, advc 1 p, rs)++scanBeginOfLine :: Lexer Token+scanBeginOfLine p ('{' : '-' : ' ' : 'L' : 'I' : 'N' : 'E' : ' ' : xs)+  | isOkBegin rs && isOkEnd rs'+      = scan (advc (8 + length r + 2 + length s + 4) p') (drop 4 rs')+  | otherwise+      = Just (errToken ("Invalid LINE pragma: " ++ show r) p, advc 8 p, xs)+  where+    (r,rs)   = span isDigit xs+    (s, rs') = span (/= '"') (drop 2 rs)+    p' = Pos (read r - 1) (column p) s    -- LINE pragma indicates the line number of the /next/ line!+    +    isOkBegin (' ' : '"' : _) = True+    isOkBegin _               = False+    +    isOkEnd ('"' : ' ' : '-' : '}' : _) = True+    isOkEnd _         = False+scanBeginOfLine p xs+  = scan p xs+ 
+
+ident = span isValid
+ where isValid x = isAlphaNum x || x =='_' || x == '\''
+keywords = [ "DATA", "EXT", "ATTR", "SEM","TYPE", "USE", "loc","lhs", "inst", "INCLUDE"
+           , "SET","DERIVING","FOR", "WRAPPER", "MAYBE"
+           , "PRAGMA", "SEMPRAGMA", "MODULE"
+           ]
+
+ncomment c p ('-':'}':xs) = advc' 2 p c  xs
+ncomment c p ('{':'-':xs) = advc' 2 p (ncomment (ncomment c)) xs
+ncomment c p (x:xs)       = updPos' x p (ncomment c)  xs
+ncomment c p []           = Just (errToken "unterminated nested comment" p, p,[])
+
+codescrap p xs = let (p2,xs2,sc) = codescrap' 1 p xs
+                 in case xs2 of
+                         ('}':rest) -> Just (valueToken TkTextln sc p,advc 1 p2,rest)
+                         _          -> Just (errToken "unterminated codescrap" p,p2,xs2)
+
+
+codescrap' d p [] = (p,[],[])
+{-
+codescrap' d p ('{':'{':xs) = let (p2,xs2,sc) = advc' 2 p (codescrap' d) xs
+                              in (p2,xs2,'{':' ':sc)
+codescrap' d p ('}':'}':xs) = let (p2,xs2,sc) = advc' 2 p (codescrap' d) xs
+                              in (p2,xs2,'}':' ':sc)
+-}                              
+codescrap' d p ('{':xs)     = let (p2,xs2,sc) = advc' 1 p (codescrap' (d+1)) xs
+                              in (p2,xs2,'{' : sc)
+codescrap' d p ('}':xs)     | d == 1 = (p,'}':xs,[])
+                            | otherwise = let (p2,xs2,sc) = advc' 1 p (codescrap' (d-1)) xs
+                                          in (p2,xs2,'}' : sc)
+codescrap' d p (x  :xs)     = let (p2,xs2,sc) = updPos' x p (codescrap' d) xs
+                              in (p2,xs2,x:sc)
+--Literate Mode
+scanLit xs = (fs, foldr insNL (const "") codeLns 1)
+  where insNL (n,line) rec = \n1 -> replicate (n-n1) '\n' ++ line ++ rec n
+        (fs,codeLns,_) = getBlocks ([1..] `zip`  toLines xs)
+        getBlocks [] = ([],[],[])
+        getBlocks xs = let (files1,txt1,r1) = getBlock xs
+                           (files2,txt2,r2) = getBlocks r1
+                       in (files1++files2, txt1++txt2, r2)
+
+
+        getBlock = getLines . dropWhile comment
+        getLines [] = ([],[],[])
+        getLines ((n,l):ls) | "\\begin{code}" `isPrefixOf` l = let (lns,rest) = codelines ls
+                                                               in ([],lns,rest)
+                            | "\\begin{Code}" `isPrefixOf` l = let (lns,rest) = codeLines ls
+                                                               in ([],lns,rest)
+                            | "\\IN{" `isPrefixOf` l        =
+                                     let name = getName l
+                                     in  ([name],[],ls)
+                            | otherwise = getBlock ls
+        comment = not . ("\\" `isPrefixOf`) .snd
+
+toLines     :: String -> [String]
+toLines ""   = []
+toLines s    = let (l,s') = breakLine s
+               in l :  toLines s'
+breakLine xs = case xs of
+                '\CR' : ys -> case ys of
+                                '\LF' : zs -> ([],zs) 
+                                _          -> ([],ys)
+                '\LF' : ys -> ([], ys)
+                x     : ys -> let (l,s) = breakLine ys
+                              in (x:l,s)
+                []         -> ([],[])
+ 
+codelines [] = error "Unterminated literate code block"
+codelines ((n,l):ls) | "\\end{code}" `isPrefixOf` l = ([],ls)
+                     | otherwise                    = let (lns,r) = codelines ls
+                                                      in ((n,l):lns,r)
+
+codeLines [] = error "Unterminated literate Code block"
+codeLines ((n,l):ls) | "\\end{Code}" `isPrefixOf` l = ([],ls)
+                     | otherwise                    = let (lns,r) = codeLines ls
+                                                      in ((n,l):lns,r)
+
+getName l = case r of
+   ('}':_) -> nm
+   _       -> error $ "missing '}' in \\IN"
+ where (nm,r) = span (/='}') (drop 4 l)
+ src/SequentialComputation.lhs view
@@ -0,0 +1,394 @@+\begin{code}+module SequentialComputation (computeSequential,Vertex,Edge,Table) where+import SequentialTypes+import CommonTypes+import Interfaces+import InterfacesRules+import CodeSyntax+import GrammarInfo++import Debug.Trace+import Control.Monad(liftM,when,unless)+import Control.Monad.ST(ST, runST)+import Data.Array(Array,(!),bounds,elems)+import Data.Array.ST(STArray, newArray, readArray, writeArray, freeze)+import Data.Maybe(listToMaybe,mapMaybe,isJust,fromJust)+import Data.List(partition,nub,(\\),delete,minimumBy)+import qualified Data.Set as Set+import qualified Data.Map as Map++\end{code}++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\section{Collecting information}++In the Data.Graph library,+a graph is represented as |Array Vertex [Vertex]|,+mapping each vertex to a list of adjacent vertices.+A |Vertex| is simply encoded by an |Int|.+So to test whether an edge |(x,y)| belongs to |g|+we can evaluate |y `elem` g!x|++For more efficiency, we use Maps instead of lists.+Sets would also have done, but we also want to each edge to have a path as a witness.++Moreover, as we will mostly be adding edges to the graph,+we use a mutable array.+If we want to use any of the library+functions, we can convert our representation by |fmap Map.keys . freeze|.++\begin{code}+type Graph     = Array     Vertex [Vertex]+type MGraph    = Array     Vertex (Map.Map Vertex Path)+type MMGraph s = STArray s Vertex (Map.Map Vertex Path)++singleStep :: (Vertex->Vertex->PathStep) -> Edge -> EdgePath+singleStep f e@(s,t) = (e, [f s t])++\end{code}++We can add an edge to a graph, or remove it. These functions return+whether they did something (resp. addition or removal) or not. hasEdge+only checks whether a graph contains an edge or not.++\begin{code}+addEdge :: MMGraph s -> EdgePath -> ST s Bool+addEdge graph ((s,t),p)+ = do m <- readArray graph s+      let b = not (Map.member t m)+      when b (writeArray graph s (Map.insert t p m))+      return b ++hasEdge :: MMGraph s -> EdgePath -> ST s Bool+hasEdge graph ((s,t),_)+ = do m <- readArray graph s+      return (Map.member t m)+\end{code}++The first step is to assign a number to all attributes, and a+different one to all attribute occurrences. We create an array mapping+the numbers to the information about the attribute occurrences+(|ruleTable|), so we can look up this information in $O(1)$ time. We+also build mappings from attributes to their occurrences (|tdsToTdp|)+and vice versa (|tdpToTds|). |LMH| indicates the division of the+attributes - an element |(l,m,h) `elem` LMH| means that vertices |i, l+<= i <= h| are attributes of the same nonterminal, with vertices |j, l+<= j < m| being inherited and |k, m <= k <= h| being synthesized+attributes.++See the |SequentialTypes.Info| and |SequentialTypes.LMH|++Then we collect the direct dependencies, using the integer+representations. This list of tuples (edges in the dependency graph)+all information that is collected is passed to a function that will+compute the interfaces and visit sub-sequences. We cannot do this+computation in AG, because mutable arrays require the ST monad, which+cannot be used inside AG.++Now we can build a graph for attributes, and a graph for ao's, and add+the direct dependencies to the ao graph. Like Pennings we will call+the attribte graph Tds (transitive dependencies of symbols), and the+ao-graph Tdp (transitive dependencies of productions). Unlike him, we+will have only one Tds and one Tdp graph. In |STGraph|, we can lookup+outgoing edges in |O(1)| time, but looking up incoming edges will take+|O(e)| time, where |e| is the number of edges in the graph. As we will+be doing this quite often it is worthwhile to keep both Tdp and its+transposed version. The computation will involve both Tds and Tdp. It+treats specially. TODO elaborate on that.++\begin{code}+type Tdp s = (MMGraph s, MMGraph s)+type Tds s = MMGraph s+type Comp s = (Tds s, Tdp s)+\end{code}++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\section{Generating IDS}++As we insert edges into Tdp we keep it transitively closed, so every+time we add the edge $(s,t)$ to V, we also add the edges+$\{ (r,t) || (r,s) \in V \}$ and+$\{ (s,u) || (t,u) \in V \}$.++\begin{code}+insertTdp :: Info -> Comp s -> EdgePath -> ST s ()+insertTdp info comp@(_,(tdpN,tdpT)) e@((s,t),ee)                -- how to insert an edge (s,t):+  = do b <- hasEdge tdpN e                                      -- if it's not yet present+       unless b +              (do  rs <- readArray tdpT s                       -- find all sources r for an edge to s+                   us <- readArray tdpN t                       -- find all targets u for an edge from t+                   let edges = e :[ ((r,t),er++ee    ) | (r,er) <- Map.toList rs ]+                               ++ [ ((s,u),    ee++eu) | (u,eu) <- Map.toList us ]+                               ++ [ ((r,u),er++ee++eu) | (r,er) <- Map.toList rs, (u,eu) <- Map.toList us ]+                   mapM_ (addTdpEdge info comp) edges           -- and add all of them, without having to bother about transitive closure anymore+              )+\end{code}++Edges in |Tdp| can induce edges in |Tds|, so whenever we add+an edge, we also add the induced edge if necessary++\begin{code}+addTdpEdge :: Info -> Comp s -> EdgePath -> ST s ()         -- how to add an edge (s,t) when not having to bother about the transitive closure:+addTdpEdge info comp@(_,(tdpN,tdpT)) e@((s,t),ee)+  = do b <- addEdge tdpN e                                  -- add it to the normal graph+       when b                                               -- if it was a new edge+           (do  addEdge tdpT ((t,s),ee)                     --   also add it to the transposed graph+                let  u = tdpToTds info ! s                  --   find the corresponding attributes...+                     v = tdpToTds info ! t+                     nonlocal = u /= -1 && v /= -1+                     equalfield = isEqualField (ruleTable info ! s) (ruleTable info ! t)+                when (nonlocal && equalfield)               -- ...and when necessary...+                     (insertTds info comp ((u,v),ee))       -- ...insert it to the Tds graph+           )+\end{code}++Inserting edges into |Tds| will insert edges between the occurrences+of the attributes into |Tdp|.++\begin{code}+insertTds :: Info -> Comp s -> EdgePath -> ST s ()+insertTds info comp@(tds,_) e@((u,v),ee)+  =  do b <- addEdge tds e+        when b+             (mapM_ (insertTdp info comp) [ ( (s,t), [AttrStep u v] )+                                          | s <- tdsToTdp info ! u+                                          , not (getIsIn (ruleTable info ! s))    -- inherited at LHS, or synthesized at RHS+                                          , t <- tdsToTdp info ! v+                                          , getIsIn (ruleTable info ! t)          -- synthesized at LHS, or inherited at RHS+                                          , isEqualField (ruleTable info ! s) (ruleTable info ! t)+                                          ]+             )++\end{code}++If we add the direct dependencies to the Tdp graph in the way above, the+Tds graph is filled with IDS.+Below is a way to only build up the Tdp graph, without reflect the changes in the Tds graph.++\begin{code}+simpleInsert :: Tdp s -> EdgePath -> ST s ()+simpleInsert tdp@(tdpN,tdpT) e@((s,t),ee)+  = do b <- hasEdge tdpT ((t,s),undefined)+       unless b (do  rs <- readArray tdpT s+                     us <- readArray tdpN t+                     let edges = e :[ ((r,t),er++ee    ) | (r,er) <- Map.toList rs ]+                                 ++ [ ((s,u),    ee++eu) | (u,eu) <- Map.toList us ]+                                 ++ [ ((r,u),er++ee++eu) | (r,er) <- Map.toList rs, (u,eu) <- Map.toList us ]+                     mapM_ (addSimpleEdge tdp) edges+                )++addSimpleEdge :: Tdp s -> EdgePath -> ST s ()+addSimpleEdge (tdpN,tdpT) e@((s,t),ee)+  = do b <- addEdge tdpN e+       when b (do addEdge tdpT ((t,s),ee)+                  return ()+              )+\end{code}+++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\section{Interfaces}++In absence of cycles we can find the interfaces. We only take+attributes that are used.++When an attribute has no incoming edges it can be computed. As the+emphasis is on incoming edges, we will work with the transposed Tds+graph. The funtion |used| indicates which vertices are included in the+interfaces.++See modules Interfaces and InterfacesRules for more information.++%format sem_IRoot_IRoot = "sem_{IRoot}"+%format sem_Interface_Interface = "sem_{Interface}"+%format sem_Interfaces_Cons = ":_{Interfaces}"+%format sem_Interfaces_Nil = "[]_{Interfaces}"+%format sem_Segments_Cons = ":_{Segments}"+%format sem_Segments_Nil = "[]_{Segments}"++\begin{code}+makeInterfaces :: Info -> Graph -> T_IRoot+makeInterfaces info tds+  =  let interslist = reverse . makeInterface tds []+         mkSegments = foldr (sem_Segments_Cons . uncurry sem_Segment_Segment) sem_Segments_Nil . interslist+         mkInter ((nt,cons),lmh) = sem_Interface_Interface nt cons (mkSegments lmh)+         inters = foldr (sem_Interfaces_Cons . mkInter) sem_Interfaces_Nil (zip (prods info) (lmh info))+     in sem_IRoot_IRoot inters+\end{code}++The sinks of a graph are those vertices that have no outgoing+edges. We define a function that determines whether a vertex is a sink+if a set |del| of vertices had been removed from the graph. This means+that the attribute can be computed if all attributes in |del| have+been computed.++\begin{code}+isSink :: Graph -> [Vertex] -> Vertex -> Bool+isSink graph del v = null (graph ! v \\ del)+\end{code}++Now we can make interfaces by taking inherited sinks and synthesized+sinks alternatively. If there are no synthesized attributes at all,+generate an interface with one visit computing nothing.++\begin{code}+makeInterface :: Graph -> [Vertex] -> LMH -> [([Vertex],[Vertex])]+makeInterface tds del (l,m,h)+  | m > h = [([],[])]+  | otherwise = let  syn = filter (isSink tds del) ([m..h] \\ del)+                     del' = del ++ syn+                     inh = filter (isSink tds del') ([l..(m-1)] \\ del')+                     del'' = del' ++ inh+                     rest = makeInterface tds del'' (l,m,h)+                in if  null inh && null syn+                       then []+                       else (inh,syn) : rest+\end{code}++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\section{Detecting of cycles}++We only want to return s2i edges.++\begin{code}+findCycles :: Info -> MGraph -> [EdgePaths]+findCycles info tds+  = [ ((u,v),p1,p2)+    | (l,m,h) <- lmh info                    -- for every nonterminal: [l..m-1] are inherited, [m..h] are synthesized+    , v <- [m..h]                            -- for every synthesized attribute+    , (u,p1) <- Map.toList (tds ! v)         -- find dependent attributes...+    , l <= u, u < m                          -- ...that are inherited...+    , let mbp2 = Map.lookup v (tds ! u)      -- ...and have a cycle back+    , isJust mbp2+    , let p2 = fromJust mbp2+    ]++findLocCycles :: MGraph -> [EdgePath]+findLocCycles tdp+  = let (low, high) = bounds tdp+    in  [ ((u,u),p)+        | u <- [low..high]+        , (v,p) <- Map.toList (tdp ! u)+        , v==u+        ]++findInstCycles :: [Edge] -> MGraph -> [EdgePath]+findInstCycles instToSynEdges tdp+  = [ ((i,s), fromJust mbp)+    | (i, s) <- instToSynEdges+    , let mbp = Map.lookup i (tdp ! s)+    , isJust mbp+    ]+\end{code}++++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%+\section{Tying it together}++\begin{code}+generateVisits :: Info -> MGraph -> MGraph -> [Edge] -> (CInterfaceMap, CVisitsMap, [Edge])+generateVisits info tds tdp dpr+  = let  inters = makeInterfaces info (fmap Map.keys tds)+         inhs = Inh_IRoot{ info_Inh_IRoot = info+                         , tdp_Inh_IRoot  = fmap Map.keys tdp+                         , dpr_Inh_IRoot  = dpr+                         }+         iroot = wrap_IRoot inters inhs+    in (inters_Syn_IRoot iroot, visits_Syn_IRoot iroot, edp_Syn_IRoot iroot)++reportLocalCycle :: MGraph -> [EdgePath] -> [[Vertex]]+reportLocalCycle tds cyc+  = fst (foldr f ([],Set.empty) (map (edgePathToEdgeRoute tds) cyc))+    where f ((x,_),p) res@(paths,syms) | Set.member x syms = res    -- don't report a cyclic vertex if it appears on a path of an earlier reported one+                                       | otherwise         = (p:paths, Set.union syms (Set.fromList p))++reportCycle :: Info -> MGraph -> [EdgePaths] -> [EdgeRoutes]+reportCycle info tds cyc+  = fst (foldr f ([],Set.empty) (map (edgePathsToEdgeRoutes tds) cyc))+    where f epp@((x,y),p1,p2) res@(paths,syms) | Set.member x syms && +                                                 Set.member y syms    = res    -- don't report mutually dependent vertices if both appear on paths reported earlier+                                               | otherwise            = (epp:paths, Set.union syms (Set.fromList (map tdp2tds (p1++p2))))+          tdp2tds (-2) = -2+          tdp2tds v = tdpToTds info ! v++edgePathsToEdgeRoutes :: MGraph -> EdgePaths -> EdgeRoutes+edgePathsToEdgeRoutes tds (e,p1,p2) = ( e, pathToRoute tds p1, pathToRoute tds p2 )++edgePathToEdgeRoute :: MGraph -> EdgePath -> EdgeRoute+edgePathToEdgeRoute tds (e,p) = ( e, pathToRoute tds p )++pathToRoute :: MGraph -> Path -> Route+pathToRoute tds p = convertPath (expandAll p)+ where expandAll :: Path -> Path+       expandAll p | hasAttrStep p  = expandAll (expandOne p)+                   | otherwise      = p+       expandOne :: Path -> Path+       expandOne p = shortcut (concatMap expandStep p)+       expandStep :: PathStep -> Path+       expandStep (AttrStep u v) = fromJust (Map.lookup v (tds!u))+       expandStep x              = [x]+       convertPath :: Path -> Route+       convertPath p = concatMap convertStep p+       convertStep :: PathStep -> Route+       convertStep (AtOcStep s t) = [s,t]+       convertStep (AttrIndu s t) = [-2,-2]++hasAttrStep :: Path -> Bool+hasAttrStep []                  = False+hasAttrStep (AttrStep _ _ : _ ) = True+hasAttrStep (_            : xs) = hasAttrStep xs     ++shortcut :: Eq a => [a] -> [a]+shortcut []     = []+shortcut (x:xs) = x : shortcut (removeBefore x xs)++removeBefore :: Eq a => a -> [a] -> [a]+removeBefore x ys = reverse (takeWhile (/=x) (reverse ys))+++isLocLoc :: Table CRule -> EdgePath -> Bool+isLocLoc rt ((s,t),_) = isLocal (rt ! s) && isLocal (rt ! t)+                        -- || (isInst (rt ! s) && isInst (rt ! t))++computeSequential :: Info -> [Edge] -> [Edge] -> CycleStatus+computeSequential info dpr instToSynEdges+  = runST+    (do let bigBounds   = bounds (tdpToTds info)+            smallBounds = bounds (tdsToTdp info)+            (ll,es) = partition (isLocLoc (ruleTable info)) (map (singleStep AtOcStep) (dpr ++ instToSynEdges))+        tds  <- newArray smallBounds Map.empty+        tdpN <- newArray bigBounds   Map.empty+        tdpT <- newArray bigBounds   Map.empty+        let tdp = (tdpN,tdpT)+            comp = (tds,tdp)+        mapM_ (simpleInsert tdp) ll                                                        -- insert the local dependencies+        tdp1 <- freeze tdpN+        let cyc1 = findLocCycles tdp1+        if  not (null cyc1)                                                                -- are they cyclic?+            then do return (LocalCycle (reportLocalCycle undefined cyc1))                  -- then report an error.+            else do  mapM_ (insertTdp info comp) es                                        -- insert the other dependencies+                     tds2 <- freeze tds+                     let cyc2 = findCycles info tds2+                     if  not (null cyc2)                                                   -- are they cyclic?+                         then do  return (DirectCycle (reportCycle info tds2 cyc2))        -- then report an error.+                         else do  tdp2 <- freeze tdpN+                                  let cyc4 = findInstCycles instToSynEdges tdp2+                                  if  not (null cyc4)+                                      then do return (InstCycle (reportLocalCycle tds2 cyc4))              -- then report an error.+                                      else do let  (cim,cvm,edp) = generateVisits info tds2 tdp2 dpr+                                              mapM_ (insertTds info comp) (map (singleStep AttrIndu) edp) -- insert dependencies induced by visit scheduling+                                              tds3 <- freeze tds+                                              let cyc3 = findCycles info tds3+                                              if  not (null cyc3)                                      -- are they cyclic?+                                                  then return (InducedCycle cim (reportCycle info tds3 cyc3)) -- then report an error.+                                                  else do tdp3 <- freeze tdpN+                                                          let cyc5 = findInstCycles instToSynEdges tdp3+                                                          if  not (null cyc5)+                                                              then do return (InstCycle (reportLocalCycle tds3 cyc5))     -- then report an error.+                                                              else do return (CycleFree cim cvm)                      -- otherwise we succeed.+    )+\end{code}+++\end{document}
+ src/SequentialTypes.hs view
@@ -0,0 +1,137 @@+module SequentialTypes where++import CodeSyntax+import CommonTypes+import Data.Array(Array)+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Set (Set)+import qualified Data.Set as Set+import Data.Maybe(fromJust)+import Data.List(partition)+import UU.Pretty+++type Vertex    = Int+data PathStep  = AttrStep Vertex Vertex+               | AtOcStep Vertex Vertex+               | AttrIndu Vertex Vertex+               deriving (Show, Eq)+               +type Path      = [PathStep]+type Route     = [Vertex]+            +type Edge      = (Int,Int)+type EdgePath  = (Edge,Path)+type EdgePaths = (Edge,Path,Path)+type EdgeRoute = (Edge,Route)+type EdgeRoutes= (Edge,Route,Route)++type Table a   = Array     Vertex a+++data ChildVisit = ChildVisit Name Name Int [Vertex] [Vertex] deriving (Eq,Show) -- field, rhs nt, visit nr., inh, syn+data NTAttr = NTAInh Nonterminal Name Type -- nt, attribute, type+            | NTASyn Nonterminal Name Type -- nt, attribute, type+               deriving Show++getNtaNameType (NTAInh nt name tp) = (name,tp)+getNtaNameType (NTASyn nt name tp) = (name,tp)++getAttr     (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = name+getIsIn     (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = ii+getHasCode  (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = hc+getLhsNt    (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = nt+getCon      (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = con+getField    (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = field+getRhsNt    (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = childnt+getType     (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = tp+getDefines  (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = defines+getUses     (CRule name ii hc nt con field childnt tp pattern rhs defines owrt origin uses) = uses++isLocal = (_LOC==) . getField+isInst = (_INST==) . getField+isLhs = (_LHS==) . getField+isRhs cr = not (isLhs cr || isLocal cr)+isSyn cr | isLocal cr  = False+         | getIsIn cr  = isRhs cr+         | otherwise   = isLhs cr+isInh = not . isSyn+hasCode cr = isLocal cr || (isLhs cr && isInh cr) || (isRhs cr && isSyn cr)++isEqualField      a b = isEqualCon a b && getField a == getField b+isDifferentField  a b = isEqualCon a b && getField a /= getField b +isEqualCon        a b = getLhsNt a == getLhsNt b && getCon a == getCon b+isRhsOfSameCon    a b = isEqualCon a b && isRhs a && isRhs b++isSynAttr (NTAInh _ _ _) = False+isSynAttr (NTASyn _ _ _) = True+isInhAttr = not . isSynAttr++ntattr :: CRule -> Maybe NTAttr+ntattr cr  | isLocal cr =  Nothing+           | isInst  cr =  Nothing -- an inst definition is just considered as a local attribute definition+           | otherwise  =  let  at = if isSyn cr then NTASyn else NTAInh+                                getNt cr = if isRhs cr then fromJust (getRhsNt cr) else getLhsNt cr+                           in Just (at (getNt cr) (getAttr cr) (fromJust (getType cr)))++cRuleLhsInh :: Name -> Nonterminal -> Constructor -> Type -> CRule+cRuleLhsInh attr nt con tp = CRule attr True False nt con _LHS Nothing (Just tp) (error "cRuleLhsInh") [] Map.empty False "" Set.empty+cRuleTerminal :: Name -> Nonterminal -> Constructor -> Type -> CRule+cRuleTerminal attr nt con tp = CRule attr True False nt con _LOC Nothing (Just tp) (error ("cRuleTerminal: " ++ show (attr, nt, con, tp))) [] Map.empty False "" Set.empty+cRuleRhsSyn :: Name -> Nonterminal -> Constructor -> Type -> Name -> Nonterminal -> CRule+cRuleRhsSyn attr nt con tp field childnt = CRule attr True False nt con field (Just childnt) (Just tp) (error ("cRuleRhsSyn: " ++ show (attr, nt, con, tp, field))) [] Map.empty False "" Set.empty++defaultRule :: Name -> Nonterminal -> Constructor -> Name -> CRule+defaultRule attr nt con field =  CRule attr (er 1) (er 2) nt con field (er 3) (er 4) (er 5) (er 6) (er 7) (er 8) (er 9) (er 10)+                                 where er i = error ("Default rule has no code " ++ show i)++instance Eq CRule where+  a == b = getAttr a == getAttr b && isEqualField a b+instance Ord CRule where+  compare a b =  compare (getLhsNt a) (getLhsNt b) +                 >/< compare (getCon a) (getCon b)+                 >/< compare (getField a) (getField b)+                 >/< compare (getAttr a) (getAttr b)+instance Eq NTAttr where+  (NTAInh nt name _) == (NTASyn nt' name' _) = False+  (NTASyn nt name _) == (NTAInh nt' name' _) = False+  (NTAInh nt name _) == (NTAInh nt' name' _) = nt == nt' && name == name'+  (NTASyn nt name _) == (NTASyn nt' name' _) = nt == nt' && name == name'+instance Ord NTAttr where+  compare (NTAInh _ _ _) (NTASyn _ _ _) = LT+  compare (NTASyn _ _ _) (NTAInh _ _ _) = GT+  compare (NTAInh nt name _) (NTAInh nt' name' _) = compare nt nt' >/< compare name name'+  compare (NTASyn nt name _) (NTASyn nt' name' _) = compare nt nt' >/< compare name name'++eqCRuleDefines :: CRule -> CRule -> Bool+eqCRuleDefines a b+  = Map.keys (getDefines a) == Map.keys (getDefines b)++(>/<) :: Ordering -> Ordering -> Ordering+EQ >/< b = b+a >/< _ = a+++eqClasses :: (a -> a -> Bool) -> [a] -> [[a]]+eqClasses p [] = []+eqClasses p (a:as) = let (isA,rest) = partition (p a) as+                     in (a:isA):eqClasses p rest++lhsshow (NTAInh field attr _) = lhsname True attr+lhsshow (NTASyn field attr _) = lhsname False attr ++rhsshow :: Name -> NTAttr -> String+rhsshow field (NTAInh _ attr _) = attrname False field attr+rhsshow field (NTASyn _ attr _) = attrname True field attr ++prettyCRule :: CRule -> String+prettyCRule cr +   =  let descr | isLocal cr = "local attribute " ++ show (getAttr cr)+                | otherwise =     (if isSyn cr then "synthesized " else "inherited ")+                               ++ "attribute "+                               ++ (if isRhs cr then show (getField cr) ++ "." else "")+                               ++ (if isLhs cr then "lhs." else "")+                               ++ (show (getAttr cr))+      in show (getLhsNt cr) ++ "." ++ show (getCon cr) ++ ", " ++ descr+
+ src/Streaming.hs view
@@ -0,0 +1,107 @@+module Streaming where++import CommonTypes(Name)+import DepTypes+import List(partition)+import Maybe(fromMaybe,fromJust)++mapp :: (a -> b) -> (a,a) -> (b,b)+mapp f (l,r) = (f l,f r)++-- vervangt nub, bepaald wel de nub maar accumuleert tevens de causes+reduce :: [UsedAttr] -> [UsedAttr]+reduce set = red set [] where+ red (res:rest) set' = red rest (r res set')+ red []         set' = set'+ r res [] = [res]+ r (r1@(Loc f1 a1 c1)) ((r2@(Loc f2 a2 c2)):rest) = if f1==f2 && a1==a2+                                                    then if length c1 < length c2+                                                         then (Loc f2 a2 c1):rest+                                                         else r2:rest+                                                    else r2:(r r1 rest)+ r (r1@(Glo a1 c1)) ((r2@(Glo a2 c2)):rest) = if a1==a2+                                              then if length c1 < length c2+                                                   then (Glo a2 c1):rest+                                                   else r2:rest+                                              else r2:(r r1 rest)+ r (r1@(Loc f1 a1 c1)) ((r2@(Glo a2 c2)):rest) = r2:(r r1 rest)+ r (r1@(Glo a1 c1)) ((r2@(Loc f2 a2 c2)):rest) = r2:(r r1 rest)++-- NB: de rechter (update-) zijde van een streamelement is nooit bevat in de linker (set-) zijde!!+-- nieuwe update set (nu) is de concat van linker en rechter (lu & ru), maar met de al gevonden resultaten (ls' & rs') eruit gefilterd (lu' & ru').+-- deze al gevonden resultaten kunnen onbekende causes bevatten, zijn worden daarom meegenomen in de reductie van de al gevonden resltaten (ls & rs).+-- deze resultaten zijn dus 100% zeker dubbel, maar worden meegenomen voor bepaling van de causes in het nieuwe resultaat+stUnion :: Stream -> Stream -> Stream+stUnion []           _            = []+stUnion _            []           = []+stUnion ((ls,lu):lr) ((rs,ru):rr) = (ns,nu):nr where+ (lu',ls') = partition (flip notElem rs) lu+ (ru',rs') = partition (flip notElem ls) ru+ nu = lu' ++ ru'+ ns = reduce (ls++ls'++rs++rs')+ nr = stUnion lr rr++{-+-- oude versie, met nub ipv reduce+stUnion :: Stream -> Stream -> Stream+stUnion [] _ = []+stUnion _ [] = []+stUnion ((xset,xupd):xrest) ((yset,yupd):yrest) = (nub (xset++yset),new):(stUnion xrest yrest) where+ new = (filter (flip notElem yset) xupd) ++ (filter (flip notElem xset) yupd)+-}++{-+-- de x wordt gebruikt om te kijken of de poort open staat, de y wordt doorgegeven als de poort openstaat+-- ouder versie, zonder kortste cause+stPort :: Name -> Stream -> Stream -> Stream+stPort attr ((xset,xupd):xrest) ((yset,yupd):yrest) = case lookup attr (map toPair xupd) of+                                                       Just causes -> addTrace causes (([],yset++yupd):yrest)+                                                       Nothing    -> ([],[]):(stPort attr xrest yrest)+-}+-- de x wordt gebruikt om te kijken of de poort open staat, de y wordt doorgegeven als de poort openstaat+-- de recursieve aanroep van stPortRest wordt gedaan om in het uiteindelijke resultaat de kortste cause te krijgen+-- waarom de cause niet initiëel de kortste is, weet ik niet. Maar er worden wel kortere causes gevonden later in het proces+{-+stPort :: Name -> Stream -> Stream -> Stream+stPort attr ((xset,xupd):xrest) ((yset,yupd):yrest) = case lookup attr (map toPair xupd) of+                                                       Just causes -> (addTrace causes ([],yset++yupd)):(stPortRest attr xrest yrest)+                                                       Nothing    -> ([],[]):(stPort attr xrest yrest)+ where                                                     +  stPortRest attr ((xset,xupd):xrest) (y:yrest) = case lookup attr (map toPair xset) of+                                                   Just causes -> (addTrace causes y):(stPortRest attr xrest yrest)+                                                   Nothing -> (error "Dit mag nooit gebeuren!" ([],[])):(stPortRest attr xrest yrest)+-}+++-- 20 januari: herschrijving van bovenstaande versie in 1 functie (zonder where)...+stPort :: Name -> Stream -> Stream -> Stream+stPort attr ((xset,xupd):xrest) ((yset,yupd):yrest) = case lookup attr (map toPair xupd) of+                                                       Just causes -> (addTrace causes ([],yset++yupd)):(zipWith (\(xset,xupd) y -> addTrace (fromJust . lookup attr . map toPair $ xset) y) xrest yrest)+                                                       Nothing    -> ([],[]):(stPort attr xrest yrest)++-- stStart biedt geen functionaliteit voor een initiële cause, want er zijn geen initiële causes:+-- het begin van een stream is namelijk altijd een attribuut dat zichzelf bepaalt. Dat heeft geen oorzaak nodig.+stStart :: Name -> Name -> Stream+stStart field attr = first:(repeat other) where+ first = ([],[Loc field attr []])+ other = ([Loc field attr []],[])++stEmpty :: Stream+stEmpty = repeat ([],[])++getStream :: Vertex -> [UseStream] -> Stream+getStream vertex streams = fromMaybe stEmpty (lookup vertex streams)++stLocal2global :: Stream -> Stream+stLocal2global = map (mapp (map (\res -> Glo (getAttr res) (getTrace res))))+-- de nub hoeft niet, want het filter op fieldname van een lokaal resultaat filtert doublures er al uit+--stLocal2global = map (mapp (nub . (map (\res -> Glo (getAttr res)))))++stFilterInclSide :: UseStream -> Stream+stFilterInclSide (vertex,stream) = stFilterOnField ((getField vertex)==) stream++stFilterExclSide :: UseStream -> Stream+stFilterExclSide (vertex,stream) = stFilterOnField ((getField vertex)/=) stream++stFilterOnField :: (Name -> Bool) -> Stream -> Stream+stFilterOnField f = map (mapp (filter (f . getField)))
+ src/TokenDef.hs view
@@ -0,0 +1,67 @@+
+module TokenDef where
+
+import UU.Scanner.Token
+import UU.Scanner.GenToken
+import UU.Scanner.GenTokenOrd
+import UU.Scanner.Position
+import UU.Parsing.MachineInterface(Symbol(..))+import Char(isPrint,ord)++
+
+instance Symbol Token  where
+ deleteCost (Reserved key _) = case key of 
+                "DATA"         -> 7
+                "EXT"          -> 7
+                "ATTR"         -> 7
+                "SEM"          -> 7
+                "USE"          -> 7
+                "INCLUDE"      -> 7
+                _              -> 5
+ deleteCost (ValToken v _  _) = case v of
+                TkError -> 0
+                _       -> 5
+++showTokens :: [(Pos,String)] -> [String]+showTokens [] = []+showTokens xs = map showLine . shiftLeft . getLines $ xs++getLines []         = []+getLines ((p,t):xs) =       let (txs,rest)     = span sameLine xs+                                sameLine (q,_) = line p == line q+                            in ((p,t):txs) : getLines rest++shiftLeft lns =        let sh = let m = minimum . checkEmpty . filter (>=1) . map (column.fst.head) $ lns+                                    checkEmpty [] = [1]+                                    checkEmpty x  = x+                                in if m >= 1 then m-1 else 0+                           shift (p,t) = (if column p >= 1 then case p of (Pos l c f) -> Pos l (c - sh) f else p, t)+                       in map (map shift) lns++showLine ts =        let f (p,t) r = let ct = column p+                                     in \c -> spaces (ct-c) ++ t ++ r (length t+ct)+                         spaces x | x < 0 = ""+                                  | otherwise = replicate x ' '+                     in foldr f (const "") ts 1+++showStrShort xs = "\"" ++ concatMap f xs ++ "\""+  where f '"' = "\\\""+        f x   = showCharShort' x++showCharShort '\'' = "'" ++ "\\'" ++ "'"+showCharShort c    = "'" ++ showCharShort' c ++ "'"++showCharShort' '\a'  = "\\a"+showCharShort' '\b'  = "\\b"+showCharShort' '\t'  = "\\t"+showCharShort' '\n'  = "\\n"+showCharShort' '\r'  = "\\r"+showCharShort' '\f'  = "\\f"+showCharShort' '\v'  = "\\v"+showCharShort' '\\'  = "\\\\"+showCharShort' x | isPrint x = [x]+                 | otherwise = '\\' : show (ord x)+
+ src/Version.hs view
@@ -0,0 +1,4 @@+module Version where
+
+banner :: String
+banner = "Attribute Grammar compiler / HUT project. Version 0.9.5"
+ uuagc.cabal view
@@ -0,0 +1,64 @@+cabal-version: >=1.2+build-type: Simple+name: uuagc+version: 0.9.5+license: GPL+license-file: LICENSE+maintainer: Arie Middelkoop <ariem@cs.uu.nl>+homepage: http://www.cs.uu.nl/wiki/HUT/WebHome+description: Generates Haskell files from an attribute grammar specification+synopsis: Attribute Grammar System of Universiteit Utrecht+category: Development+stability: Stable+copyright: Universiteit Utrecht+extra-source-files: README, uuagc.cabal-for-ghc-6.6++flag small_base+  description: Choose the new smaller, split-up base package.+executable uuagc+  if flag(small_base)+    build-depends: base >= 3, containers, directory, array+  else+    build-depends: base < 3++  build-depends: haskell98, uulib+  main-is: Ag.hs+  other-modules: Ag+    , CommonTypes+    , DepTypes+    , GrammarInfo+    , HsTokenScanner+    , Options+    , PPUtil+    , Parser+    , Pretty+    , Scanner+    , SequentialComputation+    , SequentialTypes+    , Streaming+    , TokenDef+    , Version+    , AbstractSyntax+    , AbstractSyntaxDump+    , Code+    , CodeSyntax+    , CodeSyntaxDump+    , ConcreteSyntax+    , DeclBlocks+    , DefaultRules+    , Desugar+    , ErrorMessages+    , Expression+    , GenerateCode+    , HsToken+    , Interfaces+    , InterfacesRules+    , Order+    , Patterns+    , PrintCode+    , PrintErrorMessages+    , SemHsTokens+    , Transform+  extensions: TypeSynonymInstances, MultiParamTypeClasses+  hs-source-dirs: src, src-derived+
+ uuagc.cabal-for-ghc-6.6 view
@@ -0,0 +1,47 @@+name: uuagc+version: 0.9.5+license: GPL+license-file: LICENSE+maintainer: Arie Middelkoop <ariem@cs.uu.nl>+Build-Depends: base, haskell98, uulib++Executable:     uuagc+Main-Is:        Ag.hs+Other-Modules: Ag+    , CommonTypes+    , DepTypes+    , GrammarInfo+    , HsTokenScanner+    , Options+    , PPUtil+    , Parser+    , Pretty+    , Scanner+    , SequentialComputation+    , SequentialTypes+    , Streaming+    , TokenDef+    , Version+    , AbstractSyntax+    , AbstractSyntaxDump+    , Code+    , CodeSyntax+    , CodeSyntaxDump+    , ConcreteSyntax+    , DeclBlocks+    , DefaultRules+    , Desugar+    , ErrorMessages+    , Expression+    , GenerateCode+    , HsToken+    , Interfaces+    , InterfacesRules+    , Order+    , Patterns+    , PrintCode+    , PrintErrorMessages+    , SemHsTokens+    , Transform+Extensions: TypeSynonymInstances, MultiParamTypeClasses+Hs-Source-Dirs: src, src-derived