packages feed

uuagc-bootstrap-0.9.39.3.0: src-derived/ResolveLocals.hs


-- UUAGC 0.9.39.1.0 (src-ag/ResolveLocals.ag)
module ResolveLocals where
{-# LINE 15 "src-ag/ResolveLocals.ag" #-}

import qualified Data.Set as Set
import qualified Data.Map as Map
import Data.Map(Map)
import qualified Data.Sequence as Seq
import Data.Sequence(Seq,(><))
import CommonTypes
import Patterns
import ErrorMessages
import AbstractSyntax
import Expression
import Options
import HsToken(HsTokensRoot(HsTokensRoot))
import HsTokenScanner(lexTokens)
import SemHsTokens(sem_HsTokensRoot,wrap_HsTokensRoot, Syn_HsTokensRoot(..),Inh_HsTokensRoot(..))
import Data.Maybe
{-# LINE 23 "dist/build/uuagc/uuagc-tmp/ResolveLocals.hs" #-}

{-# LINE 2 "src-ag/AbstractSyntax.ag" #-}

-- AbstractSyntax.ag imports
import Data.Set(Set)
import Data.Map(Map)
import Patterns    (Pattern(..),Patterns)
import Expression  (Expression(..))
import Macro --marcos
import CommonTypes
import ErrorMessages
{-# LINE 35 "dist/build/uuagc/uuagc-tmp/ResolveLocals.hs" #-}

{-# LINE 2 "src-ag/Patterns.ag" #-}

-- Patterns.ag imports
import UU.Scanner.Position(Pos)
import CommonTypes (ConstructorIdent,Identifier)
{-# LINE 42 "dist/build/uuagc/uuagc-tmp/ResolveLocals.hs" #-}

{-# LINE 2 "src-ag/Expression.ag" #-}

import UU.Scanner.Position(Pos)
import HsToken
{-# LINE 48 "dist/build/uuagc/uuagc-tmp/ResolveLocals.hs" #-}
-- Child -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allfields            : [(Identifier,Type,ChildKind)]
         allnts               : [Identifier]
         attrs                : [(Identifier,Identifier)]
         con                  : Identifier
         inh                  : Attributes
         inhMap               : Map Identifier Attributes
         mergeMap             : Map Identifier (Identifier,[Identifier])
         nt                   : Identifier
         syn                  : Attributes
         synMap               : Map Identifier Attributes
      synthesized attributes:
         attributes           : [(Identifier,Attributes,Attributes)]
         field                : (Identifier,Type,ChildKind)
         output               : SELF 
   alternatives:
      alternative Child:
         child name           : {Identifier}
         child tp             : {Type}
         child kind           : {ChildKind}
         visit 0:
            local chnt        : _
            local inh         : _
            local syn         : _
            local output      : _
-}
-- cata
sem_Child :: Child  ->
             T_Child 
sem_Child (Child _name _tp _kind )  =
    (sem_Child_Child _name _tp _kind )
-- semantic domain
newtype T_Child  = T_Child (([(Identifier,Type,ChildKind)]) ->
                            ([Identifier]) ->
                            ([(Identifier,Identifier)]) ->
                            Identifier ->
                            Attributes ->
                            (Map Identifier Attributes) ->
                            (Map Identifier (Identifier,[Identifier])) ->
                            Identifier ->
                            Attributes ->
                            (Map Identifier Attributes) ->
                            ( ([(Identifier,Attributes,Attributes)]),((Identifier,Type,ChildKind)),Child ))
data Inh_Child  = Inh_Child {allfields_Inh_Child :: ([(Identifier,Type,ChildKind)]),allnts_Inh_Child :: ([Identifier]),attrs_Inh_Child :: ([(Identifier,Identifier)]),con_Inh_Child :: Identifier,inh_Inh_Child :: Attributes,inhMap_Inh_Child :: (Map Identifier Attributes),mergeMap_Inh_Child :: (Map Identifier (Identifier,[Identifier])),nt_Inh_Child :: Identifier,syn_Inh_Child :: Attributes,synMap_Inh_Child :: (Map Identifier Attributes)}
data Syn_Child  = Syn_Child {attributes_Syn_Child :: ([(Identifier,Attributes,Attributes)]),field_Syn_Child :: ((Identifier,Type,ChildKind)),output_Syn_Child :: Child }
wrap_Child :: T_Child  ->
              Inh_Child  ->
              Syn_Child 
wrap_Child (T_Child sem ) (Inh_Child _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIsyn _lhsIsynMap )  =
    (let ( _lhsOattributes,_lhsOfield,_lhsOoutput) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIsyn _lhsIsynMap 
     in  (Syn_Child _lhsOattributes _lhsOfield _lhsOoutput ))
sem_Child_Child :: Identifier ->
                   Type ->
                   ChildKind ->
                   T_Child 
sem_Child_Child name_ tp_ kind_  =
    (T_Child (\ _lhsIallfields
                _lhsIallnts
                _lhsIattrs
                _lhsIcon
                _lhsIinh
                _lhsIinhMap
                _lhsImergeMap
                _lhsInt
                _lhsIsyn
                _lhsIsynMap ->
                  (let _lhsOattributes :: ([(Identifier,Attributes,Attributes)])
                       _lhsOfield :: ((Identifier,Type,ChildKind))
                       _lhsOoutput :: Child 
                       -- "src-ag/ResolveLocals.ag"(line 84, column 11)
                       _lhsOattributes =
                           ({-# LINE 84 "src-ag/ResolveLocals.ag" #-}
                            [(name_, _inh    , _syn    )]
                            {-# LINE 125 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- "src-ag/ResolveLocals.ag"(line 87, column 11)
                       _lhsOfield =
                           ({-# LINE 87 "src-ag/ResolveLocals.ag" #-}
                            (name_, tp_, kind_)
                            {-# LINE 131 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- "src-ag/DistChildAttr.ag"(line 19, column 11)
                       _chnt =
                           ({-# LINE 19 "src-ag/DistChildAttr.ag" #-}
                            case tp_ of
                              NT nt _ _ -> nt
                              Self      -> error ("The type of child " ++ show name_ ++ " should not be a Self type.")
                              Haskell t -> identifier t
                            {-# LINE 140 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- "src-ag/DistChildAttr.ag"(line 23, column 11)
                       _inh =
                           ({-# LINE 23 "src-ag/DistChildAttr.ag" #-}
                            Map.findWithDefault Map.empty _chnt     _lhsIinhMap
                            {-# LINE 146 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- "src-ag/DistChildAttr.ag"(line 24, column 11)
                       _syn =
                           ({-# LINE 24 "src-ag/DistChildAttr.ag" #-}
                            Map.findWithDefault Map.empty _chnt     _lhsIsynMap
                            {-# LINE 152 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- self rule
                       _output =
                           ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                            Child name_ tp_ kind_
                            {-# LINE 158 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- self rule
                       _lhsOoutput =
                           ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                            _output
                            {-# LINE 164 "src-ag/ResolveLocals.hs" #-}
                            )
                   in  ( _lhsOattributes,_lhsOfield,_lhsOoutput))) )
-- Children ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allfields            : [(Identifier,Type,ChildKind)]
         allnts               : [Identifier]
         attrs                : [(Identifier,Identifier)]
         con                  : Identifier
         inh                  : Attributes
         inhMap               : Map Identifier Attributes
         mergeMap             : Map Identifier (Identifier,[Identifier])
         nt                   : Identifier
         syn                  : Attributes
         synMap               : Map Identifier Attributes
      synthesized attributes:
         attributes           : [(Identifier,Attributes,Attributes)]
         fields               : [(Identifier,Type,ChildKind)]
         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 (([(Identifier,Type,ChildKind)]) ->
                                  ([Identifier]) ->
                                  ([(Identifier,Identifier)]) ->
                                  Identifier ->
                                  Attributes ->
                                  (Map Identifier Attributes) ->
                                  (Map Identifier (Identifier,[Identifier])) ->
                                  Identifier ->
                                  Attributes ->
                                  (Map Identifier Attributes) ->
                                  ( ([(Identifier,Attributes,Attributes)]),([(Identifier,Type,ChildKind)]),Children ))
data Inh_Children  = Inh_Children {allfields_Inh_Children :: ([(Identifier,Type,ChildKind)]),allnts_Inh_Children :: ([Identifier]),attrs_Inh_Children :: ([(Identifier,Identifier)]),con_Inh_Children :: Identifier,inh_Inh_Children :: Attributes,inhMap_Inh_Children :: (Map Identifier Attributes),mergeMap_Inh_Children :: (Map Identifier (Identifier,[Identifier])),nt_Inh_Children :: Identifier,syn_Inh_Children :: Attributes,synMap_Inh_Children :: (Map Identifier Attributes)}
data Syn_Children  = Syn_Children {attributes_Syn_Children :: ([(Identifier,Attributes,Attributes)]),fields_Syn_Children :: ([(Identifier,Type,ChildKind)]),output_Syn_Children :: Children }
wrap_Children :: T_Children  ->
                 Inh_Children  ->
                 Syn_Children 
wrap_Children (T_Children sem ) (Inh_Children _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIsyn _lhsIsynMap )  =
    (let ( _lhsOattributes,_lhsOfields,_lhsOoutput) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIsyn _lhsIsynMap 
     in  (Syn_Children _lhsOattributes _lhsOfields _lhsOoutput ))
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
                   _lhsIinhMap
                   _lhsImergeMap
                   _lhsInt
                   _lhsIsyn
                   _lhsIsynMap ->
                     (let _lhsOfields :: ([(Identifier,Type,ChildKind)])
                          _lhsOattributes :: ([(Identifier,Attributes,Attributes)])
                          _lhsOoutput :: Children 
                          _hdOallfields :: ([(Identifier,Type,ChildKind)])
                          _hdOallnts :: ([Identifier])
                          _hdOattrs :: ([(Identifier,Identifier)])
                          _hdOcon :: Identifier
                          _hdOinh :: Attributes
                          _hdOinhMap :: (Map Identifier Attributes)
                          _hdOmergeMap :: (Map Identifier (Identifier,[Identifier]))
                          _hdOnt :: Identifier
                          _hdOsyn :: Attributes
                          _hdOsynMap :: (Map Identifier Attributes)
                          _tlOallfields :: ([(Identifier,Type,ChildKind)])
                          _tlOallnts :: ([Identifier])
                          _tlOattrs :: ([(Identifier,Identifier)])
                          _tlOcon :: Identifier
                          _tlOinh :: Attributes
                          _tlOinhMap :: (Map Identifier Attributes)
                          _tlOmergeMap :: (Map Identifier (Identifier,[Identifier]))
                          _tlOnt :: Identifier
                          _tlOsyn :: Attributes
                          _tlOsynMap :: (Map Identifier Attributes)
                          _hdIattributes :: ([(Identifier,Attributes,Attributes)])
                          _hdIfield :: ((Identifier,Type,ChildKind))
                          _hdIoutput :: Child 
                          _tlIattributes :: ([(Identifier,Attributes,Attributes)])
                          _tlIfields :: ([(Identifier,Type,ChildKind)])
                          _tlIoutput :: Children 
                          -- "src-ag/ResolveLocals.ag"(line 90, column 11)
                          _lhsOfields =
                              ({-# LINE 90 "src-ag/ResolveLocals.ag" #-}
                               _hdIfield : _tlIfields
                               {-# LINE 267 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- use rule "src-ag/ResolveLocals.ag"(line 82, column 32)
                          _lhsOattributes =
                              ({-# LINE 82 "src-ag/ResolveLocals.ag" #-}
                               _hdIattributes ++ _tlIattributes
                               {-# LINE 273 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _output =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               (:) _hdIoutput _tlIoutput
                               {-# LINE 279 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _lhsOoutput =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               _output
                               {-# LINE 285 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOallfields =
                              ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                               _lhsIallfields
                               {-# LINE 291 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOallnts =
                              ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                               _lhsIallnts
                               {-# LINE 297 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOattrs =
                              ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                               _lhsIattrs
                               {-# LINE 303 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOcon =
                              ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                               _lhsIcon
                               {-# LINE 309 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOinh =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIinh
                               {-# LINE 315 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOinhMap =
                              ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                               _lhsIinhMap
                               {-# LINE 321 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOmergeMap =
                              ({-# LINE 131 "src-ag/ResolveLocals.ag" #-}
                               _lhsImergeMap
                               {-# LINE 327 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOnt =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsInt
                               {-# LINE 333 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOsyn =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIsyn
                               {-# LINE 339 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOsynMap =
                              ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                               _lhsIsynMap
                               {-# LINE 345 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOallfields =
                              ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                               _lhsIallfields
                               {-# LINE 351 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOallnts =
                              ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                               _lhsIallnts
                               {-# LINE 357 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOattrs =
                              ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                               _lhsIattrs
                               {-# LINE 363 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOcon =
                              ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                               _lhsIcon
                               {-# LINE 369 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOinh =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIinh
                               {-# LINE 375 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOinhMap =
                              ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                               _lhsIinhMap
                               {-# LINE 381 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOmergeMap =
                              ({-# LINE 131 "src-ag/ResolveLocals.ag" #-}
                               _lhsImergeMap
                               {-# LINE 387 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOnt =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsInt
                               {-# LINE 393 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOsyn =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIsyn
                               {-# LINE 399 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOsynMap =
                              ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                               _lhsIsynMap
                               {-# LINE 405 "src-ag/ResolveLocals.hs" #-}
                               )
                          ( _hdIattributes,_hdIfield,_hdIoutput) =
                              hd_ _hdOallfields _hdOallnts _hdOattrs _hdOcon _hdOinh _hdOinhMap _hdOmergeMap _hdOnt _hdOsyn _hdOsynMap 
                          ( _tlIattributes,_tlIfields,_tlIoutput) =
                              tl_ _tlOallfields _tlOallnts _tlOattrs _tlOcon _tlOinh _tlOinhMap _tlOmergeMap _tlOnt _tlOsyn _tlOsynMap 
                      in  ( _lhsOattributes,_lhsOfields,_lhsOoutput))) )
sem_Children_Nil :: T_Children 
sem_Children_Nil  =
    (T_Children (\ _lhsIallfields
                   _lhsIallnts
                   _lhsIattrs
                   _lhsIcon
                   _lhsIinh
                   _lhsIinhMap
                   _lhsImergeMap
                   _lhsInt
                   _lhsIsyn
                   _lhsIsynMap ->
                     (let _lhsOfields :: ([(Identifier,Type,ChildKind)])
                          _lhsOattributes :: ([(Identifier,Attributes,Attributes)])
                          _lhsOoutput :: Children 
                          -- "src-ag/ResolveLocals.ag"(line 91, column 11)
                          _lhsOfields =
                              ({-# LINE 91 "src-ag/ResolveLocals.ag" #-}
                               []
                               {-# LINE 431 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- use rule "src-ag/ResolveLocals.ag"(line 82, column 32)
                          _lhsOattributes =
                              ({-# LINE 82 "src-ag/ResolveLocals.ag" #-}
                               []
                               {-# LINE 437 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _output =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               []
                               {-# LINE 443 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _lhsOoutput =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               _output
                               {-# LINE 449 "src-ag/ResolveLocals.hs" #-}
                               )
                      in  ( _lhsOattributes,_lhsOfields,_lhsOoutput))) )
-- Expression --------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allfields            : [(Identifier,Type,ChildKind)]
         allnts               : [Identifier]
         attrs                : [(Identifier,Identifier)]
         con                  : Identifier
         mergeMap             : Map Identifier (Identifier,[Identifier])
         nt                   : Identifier
         options              : Options
      synthesized attributes:
         errors               : Seq Error
         output               : SELF 
   alternatives:
      alternative Expression:
         child pos            : {Pos}
         child tks            : {[HsToken]}
         visit 0:
            local _tup1       : _
            local errors      : _
            local newTks      : _
            local output      : _
-}
-- cata
sem_Expression :: Expression  ->
                  T_Expression 
sem_Expression (Expression _pos _tks )  =
    (sem_Expression_Expression _pos _tks )
-- semantic domain
newtype T_Expression  = T_Expression (([(Identifier,Type,ChildKind)]) ->
                                      ([Identifier]) ->
                                      ([(Identifier,Identifier)]) ->
                                      Identifier ->
                                      (Map Identifier (Identifier,[Identifier])) ->
                                      Identifier ->
                                      Options ->
                                      ( (Seq Error),Expression ))
data Inh_Expression  = Inh_Expression {allfields_Inh_Expression :: ([(Identifier,Type,ChildKind)]),allnts_Inh_Expression :: ([Identifier]),attrs_Inh_Expression :: ([(Identifier,Identifier)]),con_Inh_Expression :: Identifier,mergeMap_Inh_Expression :: (Map Identifier (Identifier,[Identifier])),nt_Inh_Expression :: Identifier,options_Inh_Expression :: Options}
data Syn_Expression  = Syn_Expression {errors_Syn_Expression :: (Seq Error),output_Syn_Expression :: Expression }
wrap_Expression :: T_Expression  ->
                   Inh_Expression  ->
                   Syn_Expression 
wrap_Expression (T_Expression sem ) (Inh_Expression _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsImergeMap _lhsInt _lhsIoptions )  =
    (let ( _lhsOerrors,_lhsOoutput) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsImergeMap _lhsInt _lhsIoptions 
     in  (Syn_Expression _lhsOerrors _lhsOoutput ))
sem_Expression_Expression :: Pos ->
                             ([HsToken]) ->
                             T_Expression 
sem_Expression_Expression pos_ tks_  =
    (T_Expression (\ _lhsIallfields
                     _lhsIallnts
                     _lhsIattrs
                     _lhsIcon
                     _lhsImergeMap
                     _lhsInt
                     _lhsIoptions ->
                       (let _lhsOoutput :: Expression 
                            _lhsOerrors :: (Seq Error)
                            -- "src-ag/ResolveLocals.ag"(line 145, column 21)
                            __tup1 =
                                ({-# LINE 145 "src-ag/ResolveLocals.ag" #-}
                                 let mergedChildren = [ x | (_,xs) <- Map.elems _lhsImergeMap, x <- xs ]
                                     attrsIn = filter (\(fld,_) -> not (fld `elem` mergedChildren)) _lhsIattrs
                                     inherited = Inh_HsTokensRoot
                                                 { attrs_Inh_HsTokensRoot      = attrsIn
                                                 , con_Inh_HsTokensRoot        = _lhsIcon
                                                 , allfields_Inh_HsTokensRoot  = _lhsIallfields
                                                 , allnts_Inh_HsTokensRoot     = _lhsIallnts
                                                 , nt_Inh_HsTokensRoot         = _lhsInt
                                                 }
                                     synthesized = wrap_HsTokensRoot (sem_HsTokensRoot (HsTokensRoot tks_)) inherited
                                 in (errors_Syn_HsTokensRoot synthesized, output_Syn_HsTokensRoot synthesized)
                                 {-# LINE 525 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 145, column 21)
                            (_errors,_) =
                                ({-# LINE 145 "src-ag/ResolveLocals.ag" #-}
                                 __tup1
                                 {-# LINE 531 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 145, column 21)
                            (_,_newTks) =
                                ({-# LINE 145 "src-ag/ResolveLocals.ag" #-}
                                 __tup1
                                 {-# LINE 537 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 157, column 17)
                            _lhsOoutput =
                                ({-# LINE 157 "src-ag/ResolveLocals.ag" #-}
                                 Expression pos_ _newTks
                                 {-# LINE 543 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                            _lhsOerrors =
                                ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                                 _errors
                                 {-# LINE 549 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- self rule
                            _output =
                                ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                 Expression pos_ tks_
                                 {-# LINE 555 "src-ag/ResolveLocals.hs" #-}
                                 )
                        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 NontermIdent}
         child nonts          : Nonterminals 
         child pragmas        : {PragmaMap}
         child manualAttrOrderMap : {AttrOrderMap}
         child paramMap       : {ParamMap}
         child contextMap     : {ContextMap}
         child quantMap       : {QuantMap}
         child uniqueMap      : {UniqueMap}
         child augmentsMap    : {Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))}
         child aroundsMap     : {Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))}
         child mergeMap       : {Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier, [Identifier], Expression)))}
         visit 0:
            local output      : _
-}
-- cata
sem_Grammar :: Grammar  ->
               T_Grammar 
sem_Grammar (Grammar _typeSyns _useMap _derivings _wrappers _nonts _pragmas _manualAttrOrderMap _paramMap _contextMap _quantMap _uniqueMap _augmentsMap _aroundsMap _mergeMap )  =
    (sem_Grammar_Grammar _typeSyns _useMap _derivings _wrappers (sem_Nonterminals _nonts ) _pragmas _manualAttrOrderMap _paramMap _contextMap _quantMap _uniqueMap _augmentsMap _aroundsMap _mergeMap )
-- 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  ->
                Inh_Grammar  ->
                Syn_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 NontermIdent) ->
                       T_Nonterminals  ->
                       PragmaMap ->
                       AttrOrderMap ->
                       ParamMap ->
                       ContextMap ->
                       QuantMap ->
                       UniqueMap ->
                       (Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))) ->
                       (Map NontermIdent (Map ConstructorIdent (Map Identifier [Expression]))) ->
                       (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier, [Identifier], Expression)))) ->
                       T_Grammar 
sem_Grammar_Grammar typeSyns_ useMap_ derivings_ wrappers_ (T_Nonterminals nonts_ ) pragmas_ manualAttrOrderMap_ paramMap_ contextMap_ quantMap_ uniqueMap_ augmentsMap_ aroundsMap_ mergeMap_  =
    (T_Grammar (\ _lhsIoptions ->
                    (let _nontsOallnts :: ([Identifier])
                         _nontsOmergeMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))
                         _nontsOinhMap :: (Map Identifier Attributes)
                         _nontsOsynMap :: (Map Identifier Attributes)
                         _lhsOerrors :: (Seq Error)
                         _lhsOoutput :: Grammar 
                         _nontsOoptions :: Options
                         _nontsIerrors :: (Seq Error)
                         _nontsIinhMap' :: (Map Identifier Attributes)
                         _nontsInonts :: ([(NontermIdent,[ConstructorIdent])])
                         _nontsIoutput :: Nonterminals 
                         _nontsIsynMap' :: (Map Identifier Attributes)
                         -- "src-ag/ResolveLocals.ag"(line 60, column 13)
                         _nontsOallnts =
                             ({-# LINE 60 "src-ag/ResolveLocals.ag" #-}
                              map fst (_nontsInonts)
                              {-# LINE 634 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- "src-ag/ResolveLocals.ag"(line 120, column 14)
                         _nontsOmergeMap =
                             ({-# LINE 120 "src-ag/ResolveLocals.ag" #-}
                              Map.map (Map.map (Map.map (\(nt,srcs,_) -> (nt,srcs)))) mergeMap_
                              {-# LINE 640 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- "src-ag/DistChildAttr.ag"(line 15, column 13)
                         _nontsOinhMap =
                             ({-# LINE 15 "src-ag/DistChildAttr.ag" #-}
                              _nontsIinhMap'
                              {-# LINE 646 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- "src-ag/DistChildAttr.ag"(line 16, column 13)
                         _nontsOsynMap =
                             ({-# LINE 16 "src-ag/DistChildAttr.ag" #-}
                              _nontsIsynMap'
                              {-# LINE 652 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                         _lhsOerrors =
                             ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                              _nontsIerrors
                              {-# LINE 658 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _output =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              Grammar typeSyns_ useMap_ derivings_ wrappers_ _nontsIoutput pragmas_ manualAttrOrderMap_ paramMap_ contextMap_ quantMap_ uniqueMap_ augmentsMap_ aroundsMap_ mergeMap_
                              {-# LINE 664 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOoutput =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              _output
                              {-# LINE 670 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _nontsOoptions =
                             ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                              _lhsIoptions
                              {-# LINE 676 "src-ag/ResolveLocals.hs" #-}
                              )
                         ( _nontsIerrors,_nontsIinhMap',_nontsInonts,_nontsIoutput,_nontsIsynMap') =
                             nonts_ _nontsOallnts _nontsOinhMap _nontsOmergeMap _nontsOoptions _nontsOsynMap 
                     in  ( _lhsOerrors,_lhsOoutput))) )
-- Nonterminal -------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allnts               : [Identifier]
         inhMap               : Map Identifier Attributes
         mergeMap             : Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
         options              : Options
         synMap               : Map Identifier Attributes
      synthesized attributes:
         errors               : Seq Error
         inhMap'              : Map Identifier Attributes
         nonts                : [(NontermIdent,[ConstructorIdent])]
         output               : SELF 
         synMap'              : Map Identifier Attributes
   alternatives:
      alternative Nonterminal:
         child nt             : {NontermIdent}
         child params         : {[Identifier]}
         child inh            : {Attributes}
         child syn            : {Attributes}
         child prods          : Productions 
         visit 0:
            local mergeMap    : _
            local output      : _
-}
-- cata
sem_Nonterminal :: Nonterminal  ->
                   T_Nonterminal 
sem_Nonterminal (Nonterminal _nt _params _inh _syn _prods )  =
    (sem_Nonterminal_Nonterminal _nt _params _inh _syn (sem_Productions _prods ) )
-- semantic domain
newtype T_Nonterminal  = T_Nonterminal (([Identifier]) ->
                                        (Map Identifier Attributes) ->
                                        (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))) ->
                                        Options ->
                                        (Map Identifier Attributes) ->
                                        ( (Seq Error),(Map Identifier Attributes),([(NontermIdent,[ConstructorIdent])]),Nonterminal ,(Map Identifier Attributes)))
data Inh_Nonterminal  = Inh_Nonterminal {allnts_Inh_Nonterminal :: ([Identifier]),inhMap_Inh_Nonterminal :: (Map Identifier Attributes),mergeMap_Inh_Nonterminal :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))),options_Inh_Nonterminal :: Options,synMap_Inh_Nonterminal :: (Map Identifier Attributes)}
data Syn_Nonterminal  = Syn_Nonterminal {errors_Syn_Nonterminal :: (Seq Error),inhMap'_Syn_Nonterminal :: (Map Identifier Attributes),nonts_Syn_Nonterminal :: ([(NontermIdent,[ConstructorIdent])]),output_Syn_Nonterminal :: Nonterminal ,synMap'_Syn_Nonterminal :: (Map Identifier Attributes)}
wrap_Nonterminal :: T_Nonterminal  ->
                    Inh_Nonterminal  ->
                    Syn_Nonterminal 
wrap_Nonterminal (T_Nonterminal sem ) (Inh_Nonterminal _lhsIallnts _lhsIinhMap _lhsImergeMap _lhsIoptions _lhsIsynMap )  =
    (let ( _lhsOerrors,_lhsOinhMap',_lhsOnonts,_lhsOoutput,_lhsOsynMap') = sem _lhsIallnts _lhsIinhMap _lhsImergeMap _lhsIoptions _lhsIsynMap 
     in  (Syn_Nonterminal _lhsOerrors _lhsOinhMap' _lhsOnonts _lhsOoutput _lhsOsynMap' ))
sem_Nonterminal_Nonterminal :: NontermIdent ->
                               ([Identifier]) ->
                               Attributes ->
                               Attributes ->
                               T_Productions  ->
                               T_Nonterminal 
sem_Nonterminal_Nonterminal nt_ params_ inh_ syn_ (T_Productions prods_ )  =
    (T_Nonterminal (\ _lhsIallnts
                      _lhsIinhMap
                      _lhsImergeMap
                      _lhsIoptions
                      _lhsIsynMap ->
                        (let _lhsOnonts :: ([(NontermIdent,[ConstructorIdent])])
                             _prodsOnt :: Identifier
                             _prodsOinh :: Attributes
                             _prodsOsyn :: Attributes
                             _lhsOinhMap' :: (Map Identifier Attributes)
                             _lhsOsynMap' :: (Map Identifier Attributes)
                             _lhsOerrors :: (Seq Error)
                             _lhsOoutput :: Nonterminal 
                             _prodsOallnts :: ([Identifier])
                             _prodsOinhMap :: (Map Identifier Attributes)
                             _prodsOmergeMap :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
                             _prodsOoptions :: Options
                             _prodsOsynMap :: (Map Identifier Attributes)
                             _prodsIcons :: ([ConstructorIdent])
                             _prodsIerrors :: (Seq Error)
                             _prodsIoutput :: Productions 
                             -- "src-ag/ResolveLocals.ag"(line 64, column 19)
                             _lhsOnonts =
                                 ({-# LINE 64 "src-ag/ResolveLocals.ag" #-}
                                  [(nt_,_prodsIcons)]
                                  {-# LINE 759 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- "src-ag/ResolveLocals.ag"(line 112, column 17)
                             _prodsOnt =
                                 ({-# LINE 112 "src-ag/ResolveLocals.ag" #-}
                                  nt_
                                  {-# LINE 765 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- "src-ag/ResolveLocals.ag"(line 115, column 17)
                             _prodsOinh =
                                 ({-# LINE 115 "src-ag/ResolveLocals.ag" #-}
                                  inh_
                                  {-# LINE 771 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- "src-ag/ResolveLocals.ag"(line 116, column 17)
                             _prodsOsyn =
                                 ({-# LINE 116 "src-ag/ResolveLocals.ag" #-}
                                  syn_
                                  {-# LINE 777 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- "src-ag/ResolveLocals.ag"(line 128, column 32)
                             _mergeMap =
                                 ({-# LINE 128 "src-ag/ResolveLocals.ag" #-}
                                  Map.findWithDefault Map.empty nt_ _lhsImergeMap
                                  {-# LINE 783 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- "src-ag/DistChildAttr.ag"(line 7, column 18)
                             _lhsOinhMap' =
                                 ({-# LINE 7 "src-ag/DistChildAttr.ag" #-}
                                  Map.singleton nt_ inh_
                                  {-# LINE 789 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- "src-ag/DistChildAttr.ag"(line 8, column 18)
                             _lhsOsynMap' =
                                 ({-# LINE 8 "src-ag/DistChildAttr.ag" #-}
                                  Map.singleton nt_ syn_
                                  {-# LINE 795 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                             _lhsOerrors =
                                 ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                                  _prodsIerrors
                                  {-# LINE 801 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- self rule
                             _output =
                                 ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                  Nonterminal nt_ params_ inh_ syn_ _prodsIoutput
                                  {-# LINE 807 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- self rule
                             _lhsOoutput =
                                 ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                  _output
                                  {-# LINE 813 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _prodsOallnts =
                                 ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIallnts
                                  {-# LINE 819 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _prodsOinhMap =
                                 ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                  _lhsIinhMap
                                  {-# LINE 825 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (from local)
                             _prodsOmergeMap =
                                 ({-# LINE 126 "src-ag/ResolveLocals.ag" #-}
                                  _mergeMap
                                  {-# LINE 831 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _prodsOoptions =
                                 ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 837 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _prodsOsynMap =
                                 ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                  _lhsIsynMap
                                  {-# LINE 843 "src-ag/ResolveLocals.hs" #-}
                                  )
                             ( _prodsIcons,_prodsIerrors,_prodsIoutput) =
                                 prods_ _prodsOallnts _prodsOinh _prodsOinhMap _prodsOmergeMap _prodsOnt _prodsOoptions _prodsOsyn _prodsOsynMap 
                         in  ( _lhsOerrors,_lhsOinhMap',_lhsOnonts,_lhsOoutput,_lhsOsynMap'))) )
-- Nonterminals ------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allnts               : [Identifier]
         inhMap               : Map Identifier Attributes
         mergeMap             : Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
         options              : Options
         synMap               : Map Identifier Attributes
      synthesized attributes:
         errors               : Seq Error
         inhMap'              : Map Identifier Attributes
         nonts                : [(NontermIdent,[ConstructorIdent])]
         output               : SELF 
         synMap'              : Map Identifier Attributes
   alternatives:
      alternative Cons:
         child hd             : Nonterminal 
         child tl             : Nonterminals 
         visit 0:
            local output      : _
      alternative Nil:
         visit 0:
            local output      : _
-}
-- cata
sem_Nonterminals :: Nonterminals  ->
                    T_Nonterminals 
sem_Nonterminals list  =
    (Prelude.foldr sem_Nonterminals_Cons sem_Nonterminals_Nil (Prelude.map sem_Nonterminal list) )
-- semantic domain
newtype T_Nonterminals  = T_Nonterminals (([Identifier]) ->
                                          (Map Identifier Attributes) ->
                                          (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))) ->
                                          Options ->
                                          (Map Identifier Attributes) ->
                                          ( (Seq Error),(Map Identifier Attributes),([(NontermIdent,[ConstructorIdent])]),Nonterminals ,(Map Identifier Attributes)))
data Inh_Nonterminals  = Inh_Nonterminals {allnts_Inh_Nonterminals :: ([Identifier]),inhMap_Inh_Nonterminals :: (Map Identifier Attributes),mergeMap_Inh_Nonterminals :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))),options_Inh_Nonterminals :: Options,synMap_Inh_Nonterminals :: (Map Identifier Attributes)}
data Syn_Nonterminals  = Syn_Nonterminals {errors_Syn_Nonterminals :: (Seq Error),inhMap'_Syn_Nonterminals :: (Map Identifier Attributes),nonts_Syn_Nonterminals :: ([(NontermIdent,[ConstructorIdent])]),output_Syn_Nonterminals :: Nonterminals ,synMap'_Syn_Nonterminals :: (Map Identifier Attributes)}
wrap_Nonterminals :: T_Nonterminals  ->
                     Inh_Nonterminals  ->
                     Syn_Nonterminals 
wrap_Nonterminals (T_Nonterminals sem ) (Inh_Nonterminals _lhsIallnts _lhsIinhMap _lhsImergeMap _lhsIoptions _lhsIsynMap )  =
    (let ( _lhsOerrors,_lhsOinhMap',_lhsOnonts,_lhsOoutput,_lhsOsynMap') = sem _lhsIallnts _lhsIinhMap _lhsImergeMap _lhsIoptions _lhsIsynMap 
     in  (Syn_Nonterminals _lhsOerrors _lhsOinhMap' _lhsOnonts _lhsOoutput _lhsOsynMap' ))
sem_Nonterminals_Cons :: T_Nonterminal  ->
                         T_Nonterminals  ->
                         T_Nonterminals 
sem_Nonterminals_Cons (T_Nonterminal hd_ ) (T_Nonterminals tl_ )  =
    (T_Nonterminals (\ _lhsIallnts
                       _lhsIinhMap
                       _lhsImergeMap
                       _lhsIoptions
                       _lhsIsynMap ->
                         (let _lhsOerrors :: (Seq Error)
                              _lhsOinhMap' :: (Map Identifier Attributes)
                              _lhsOnonts :: ([(NontermIdent,[ConstructorIdent])])
                              _lhsOsynMap' :: (Map Identifier Attributes)
                              _lhsOoutput :: Nonterminals 
                              _hdOallnts :: ([Identifier])
                              _hdOinhMap :: (Map Identifier Attributes)
                              _hdOmergeMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))
                              _hdOoptions :: Options
                              _hdOsynMap :: (Map Identifier Attributes)
                              _tlOallnts :: ([Identifier])
                              _tlOinhMap :: (Map Identifier Attributes)
                              _tlOmergeMap :: (Map NontermIdent (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))))
                              _tlOoptions :: Options
                              _tlOsynMap :: (Map Identifier Attributes)
                              _hdIerrors :: (Seq Error)
                              _hdIinhMap' :: (Map Identifier Attributes)
                              _hdInonts :: ([(NontermIdent,[ConstructorIdent])])
                              _hdIoutput :: Nonterminal 
                              _hdIsynMap' :: (Map Identifier Attributes)
                              _tlIerrors :: (Seq Error)
                              _tlIinhMap' :: (Map Identifier Attributes)
                              _tlInonts :: ([(NontermIdent,[ConstructorIdent])])
                              _tlIoutput :: Nonterminals 
                              _tlIsynMap' :: (Map Identifier Attributes)
                              -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                              _lhsOerrors =
                                  ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                                   _hdIerrors Seq.>< _tlIerrors
                                   {-# LINE 931 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- use rule "src-ag/DistChildAttr.ag"(line 4, column 53)
                              _lhsOinhMap' =
                                  ({-# LINE 4 "src-ag/DistChildAttr.ag" #-}
                                   _hdIinhMap' `Map.union` _tlIinhMap'
                                   {-# LINE 937 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- use rule "src-ag/ResolveLocals.ag"(line 62, column 43)
                              _lhsOnonts =
                                  ({-# LINE 62 "src-ag/ResolveLocals.ag" #-}
                                   _hdInonts ++ _tlInonts
                                   {-# LINE 943 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- use rule "src-ag/DistChildAttr.ag"(line 4, column 53)
                              _lhsOsynMap' =
                                  ({-# LINE 4 "src-ag/DistChildAttr.ag" #-}
                                   _hdIsynMap' `Map.union` _tlIsynMap'
                                   {-# LINE 949 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- self rule
                              _output =
                                  ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                   (:) _hdIoutput _tlIoutput
                                   {-# LINE 955 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- self rule
                              _lhsOoutput =
                                  ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                   _output
                                   {-# LINE 961 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallnts =
                                  ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                                   _lhsIallnts
                                   {-# LINE 967 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOinhMap =
                                  ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                   _lhsIinhMap
                                   {-# LINE 973 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOmergeMap =
                                  ({-# LINE 123 "src-ag/ResolveLocals.ag" #-}
                                   _lhsImergeMap
                                   {-# LINE 979 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOoptions =
                                  ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 985 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOsynMap =
                                  ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                   _lhsIsynMap
                                   {-# LINE 991 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallnts =
                                  ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                                   _lhsIallnts
                                   {-# LINE 997 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOinhMap =
                                  ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                   _lhsIinhMap
                                   {-# LINE 1003 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOmergeMap =
                                  ({-# LINE 123 "src-ag/ResolveLocals.ag" #-}
                                   _lhsImergeMap
                                   {-# LINE 1009 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOoptions =
                                  ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 1015 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOsynMap =
                                  ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                   _lhsIsynMap
                                   {-# LINE 1021 "src-ag/ResolveLocals.hs" #-}
                                   )
                              ( _hdIerrors,_hdIinhMap',_hdInonts,_hdIoutput,_hdIsynMap') =
                                  hd_ _hdOallnts _hdOinhMap _hdOmergeMap _hdOoptions _hdOsynMap 
                              ( _tlIerrors,_tlIinhMap',_tlInonts,_tlIoutput,_tlIsynMap') =
                                  tl_ _tlOallnts _tlOinhMap _tlOmergeMap _tlOoptions _tlOsynMap 
                          in  ( _lhsOerrors,_lhsOinhMap',_lhsOnonts,_lhsOoutput,_lhsOsynMap'))) )
sem_Nonterminals_Nil :: T_Nonterminals 
sem_Nonterminals_Nil  =
    (T_Nonterminals (\ _lhsIallnts
                       _lhsIinhMap
                       _lhsImergeMap
                       _lhsIoptions
                       _lhsIsynMap ->
                         (let _lhsOerrors :: (Seq Error)
                              _lhsOinhMap' :: (Map Identifier Attributes)
                              _lhsOnonts :: ([(NontermIdent,[ConstructorIdent])])
                              _lhsOsynMap' :: (Map Identifier Attributes)
                              _lhsOoutput :: Nonterminals 
                              -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                              _lhsOerrors =
                                  ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                                   Seq.empty
                                   {-# LINE 1044 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- use rule "src-ag/DistChildAttr.ag"(line 4, column 53)
                              _lhsOinhMap' =
                                  ({-# LINE 4 "src-ag/DistChildAttr.ag" #-}
                                   Map.empty
                                   {-# LINE 1050 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- use rule "src-ag/ResolveLocals.ag"(line 62, column 43)
                              _lhsOnonts =
                                  ({-# LINE 62 "src-ag/ResolveLocals.ag" #-}
                                   []
                                   {-# LINE 1056 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- use rule "src-ag/DistChildAttr.ag"(line 4, column 53)
                              _lhsOsynMap' =
                                  ({-# LINE 4 "src-ag/DistChildAttr.ag" #-}
                                   Map.empty
                                   {-# LINE 1062 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- self rule
                              _output =
                                  ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                   []
                                   {-# LINE 1068 "src-ag/ResolveLocals.hs" #-}
                                   )
                              -- self rule
                              _lhsOoutput =
                                  ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                   _output
                                   {-# LINE 1074 "src-ag/ResolveLocals.hs" #-}
                                   )
                          in  ( _lhsOerrors,_lhsOinhMap',_lhsOnonts,_lhsOoutput,_lhsOsynMap'))) )
-- Pattern -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         con                  : Identifier
         inh                  : Attributes
         nt                   : Identifier
         syn                  : Attributes
      synthesized attributes:
         copy                 : SELF 
         errors               : Seq Error
         instVars             : [Identifier]
         locVars              : [Identifier]
         output               : SELF 
   alternatives:
      alternative Alias:
         child field          : {Identifier}
         child attr           : {Identifier}
         child pat            : Pattern 
         visit 0:
            local copy        : _
            local output      : _
      alternative Constr:
         child name           : {ConstructorIdent}
         child pats           : Patterns 
         visit 0:
            local copy        : _
            local output      : _
      alternative Irrefutable:
         child pat            : Pattern 
         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 )  =
    (sem_Pattern_Alias _field _attr (sem_Pattern _pat ) )
sem_Pattern (Constr _name _pats )  =
    (sem_Pattern_Constr _name (sem_Patterns _pats ) )
sem_Pattern (Irrefutable _pat )  =
    (sem_Pattern_Irrefutable (sem_Pattern _pat ) )
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 (Identifier ->
                                Attributes ->
                                Identifier ->
                                Attributes ->
                                ( Pattern ,(Seq Error),([Identifier]),([Identifier]),Pattern ))
data Inh_Pattern  = Inh_Pattern {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),instVars_Syn_Pattern :: ([Identifier]),locVars_Syn_Pattern :: ([Identifier]),output_Syn_Pattern :: Pattern }
wrap_Pattern :: T_Pattern  ->
                Inh_Pattern  ->
                Syn_Pattern 
wrap_Pattern (T_Pattern sem ) (Inh_Pattern _lhsIcon _lhsIinh _lhsInt _lhsIsyn )  =
    (let ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput) = sem _lhsIcon _lhsIinh _lhsInt _lhsIsyn 
     in  (Syn_Pattern _lhsOcopy _lhsOerrors _lhsOinstVars _lhsOlocVars _lhsOoutput ))
sem_Pattern_Alias :: Identifier ->
                     Identifier ->
                     T_Pattern  ->
                     T_Pattern 
sem_Pattern_Alias field_ attr_ (T_Pattern pat_ )  =
    (T_Pattern (\ _lhsIcon
                  _lhsIinh
                  _lhsInt
                  _lhsIsyn ->
                    (let _lhsOlocVars :: ([Identifier])
                         _lhsOinstVars :: ([Identifier])
                         _lhsOerrors :: (Seq Error)
                         _lhsOcopy :: Pattern 
                         _lhsOoutput :: Pattern 
                         _patOcon :: Identifier
                         _patOinh :: Attributes
                         _patOnt :: Identifier
                         _patOsyn :: Attributes
                         _patIcopy :: Pattern 
                         _patIerrors :: (Seq Error)
                         _patIinstVars :: ([Identifier])
                         _patIlocVars :: ([Identifier])
                         _patIoutput :: Pattern 
                         -- "src-ag/ResolveLocals.ag"(line 96, column 14)
                         _lhsOlocVars =
                             ({-# LINE 96 "src-ag/ResolveLocals.ag" #-}
                              if field_ == _LOC
                                 then [attr_]
                                 else []
                              {-# LINE 1178 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- "src-ag/ResolveLocals.ag"(line 99, column 14)
                         _lhsOinstVars =
                             ({-# LINE 99 "src-ag/ResolveLocals.ag" #-}
                              if field_ == _INST
                                 then [attr_]
                                 else []
                              {-# LINE 1186 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                         _lhsOerrors =
                             ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                              _patIerrors
                              {-# LINE 1192 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              Alias field_ attr_ _patIcopy
                              {-# LINE 1198 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _output =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              Alias field_ attr_ _patIoutput
                              {-# LINE 1204 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 1210 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOoutput =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              _output
                              {-# LINE 1216 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOcon =
                             ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                              _lhsIcon
                              {-# LINE 1222 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOinh =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIinh
                              {-# LINE 1228 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOnt =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsInt
                              {-# LINE 1234 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOsyn =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIsyn
                              {-# LINE 1240 "src-ag/ResolveLocals.hs" #-}
                              )
                         ( _patIcopy,_patIerrors,_patIinstVars,_patIlocVars,_patIoutput) =
                             pat_ _patOcon _patOinh _patOnt _patOsyn 
                     in  ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
sem_Pattern_Constr :: ConstructorIdent ->
                      T_Patterns  ->
                      T_Pattern 
sem_Pattern_Constr name_ (T_Patterns pats_ )  =
    (T_Pattern (\ _lhsIcon
                  _lhsIinh
                  _lhsInt
                  _lhsIsyn ->
                    (let _lhsOerrors :: (Seq Error)
                         _lhsOinstVars :: ([Identifier])
                         _lhsOlocVars :: ([Identifier])
                         _lhsOcopy :: Pattern 
                         _lhsOoutput :: Pattern 
                         _patsOcon :: Identifier
                         _patsOinh :: Attributes
                         _patsOnt :: Identifier
                         _patsOsyn :: Attributes
                         _patsIcopy :: Patterns 
                         _patsIerrors :: (Seq Error)
                         _patsIinstVars :: ([Identifier])
                         _patsIlocVars :: ([Identifier])
                         _patsIoutput :: Patterns 
                         -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                         _lhsOerrors =
                             ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                              _patsIerrors
                              {-# LINE 1271 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                         _lhsOinstVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              _patsIinstVars
                              {-# LINE 1277 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                         _lhsOlocVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              _patsIlocVars
                              {-# LINE 1283 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              Constr name_ _patsIcopy
                              {-# LINE 1289 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _output =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              Constr name_ _patsIoutput
                              {-# LINE 1295 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 1301 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOoutput =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              _output
                              {-# LINE 1307 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOcon =
                             ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                              _lhsIcon
                              {-# LINE 1313 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOinh =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIinh
                              {-# LINE 1319 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOnt =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsInt
                              {-# LINE 1325 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOsyn =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIsyn
                              {-# LINE 1331 "src-ag/ResolveLocals.hs" #-}
                              )
                         ( _patsIcopy,_patsIerrors,_patsIinstVars,_patsIlocVars,_patsIoutput) =
                             pats_ _patsOcon _patsOinh _patsOnt _patsOsyn 
                     in  ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
sem_Pattern_Irrefutable :: T_Pattern  ->
                           T_Pattern 
sem_Pattern_Irrefutable (T_Pattern pat_ )  =
    (T_Pattern (\ _lhsIcon
                  _lhsIinh
                  _lhsInt
                  _lhsIsyn ->
                    (let _lhsOerrors :: (Seq Error)
                         _lhsOinstVars :: ([Identifier])
                         _lhsOlocVars :: ([Identifier])
                         _lhsOcopy :: Pattern 
                         _lhsOoutput :: Pattern 
                         _patOcon :: Identifier
                         _patOinh :: Attributes
                         _patOnt :: Identifier
                         _patOsyn :: Attributes
                         _patIcopy :: Pattern 
                         _patIerrors :: (Seq Error)
                         _patIinstVars :: ([Identifier])
                         _patIlocVars :: ([Identifier])
                         _patIoutput :: Pattern 
                         -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                         _lhsOerrors =
                             ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                              _patIerrors
                              {-# LINE 1361 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                         _lhsOinstVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              _patIinstVars
                              {-# LINE 1367 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                         _lhsOlocVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              _patIlocVars
                              {-# LINE 1373 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              Irrefutable _patIcopy
                              {-# LINE 1379 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _output =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              Irrefutable _patIoutput
                              {-# LINE 1385 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 1391 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOoutput =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              _output
                              {-# LINE 1397 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOcon =
                             ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                              _lhsIcon
                              {-# LINE 1403 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOinh =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIinh
                              {-# LINE 1409 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOnt =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsInt
                              {-# LINE 1415 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patOsyn =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIsyn
                              {-# LINE 1421 "src-ag/ResolveLocals.hs" #-}
                              )
                         ( _patIcopy,_patIerrors,_patIinstVars,_patIlocVars,_patIoutput) =
                             pat_ _patOcon _patOinh _patOnt _patOsyn 
                     in  ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
sem_Pattern_Product :: Pos ->
                       T_Patterns  ->
                       T_Pattern 
sem_Pattern_Product pos_ (T_Patterns pats_ )  =
    (T_Pattern (\ _lhsIcon
                  _lhsIinh
                  _lhsInt
                  _lhsIsyn ->
                    (let _lhsOerrors :: (Seq Error)
                         _lhsOinstVars :: ([Identifier])
                         _lhsOlocVars :: ([Identifier])
                         _lhsOcopy :: Pattern 
                         _lhsOoutput :: Pattern 
                         _patsOcon :: Identifier
                         _patsOinh :: Attributes
                         _patsOnt :: Identifier
                         _patsOsyn :: Attributes
                         _patsIcopy :: Patterns 
                         _patsIerrors :: (Seq Error)
                         _patsIinstVars :: ([Identifier])
                         _patsIlocVars :: ([Identifier])
                         _patsIoutput :: Patterns 
                         -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                         _lhsOerrors =
                             ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                              _patsIerrors
                              {-# LINE 1452 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                         _lhsOinstVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              _patsIinstVars
                              {-# LINE 1458 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                         _lhsOlocVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              _patsIlocVars
                              {-# LINE 1464 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              Product pos_ _patsIcopy
                              {-# LINE 1470 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _output =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              Product pos_ _patsIoutput
                              {-# LINE 1476 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 1482 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOoutput =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              _output
                              {-# LINE 1488 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOcon =
                             ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                              _lhsIcon
                              {-# LINE 1494 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOinh =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIinh
                              {-# LINE 1500 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOnt =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsInt
                              {-# LINE 1506 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOsyn =
                             ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                              _lhsIsyn
                              {-# LINE 1512 "src-ag/ResolveLocals.hs" #-}
                              )
                         ( _patsIcopy,_patsIerrors,_patsIinstVars,_patsIlocVars,_patsIoutput) =
                             pats_ _patsOcon _patsOinh _patsOnt _patsOsyn 
                     in  ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
sem_Pattern_Underscore :: Pos ->
                          T_Pattern 
sem_Pattern_Underscore pos_  =
    (T_Pattern (\ _lhsIcon
                  _lhsIinh
                  _lhsInt
                  _lhsIsyn ->
                    (let _lhsOerrors :: (Seq Error)
                         _lhsOinstVars :: ([Identifier])
                         _lhsOlocVars :: ([Identifier])
                         _lhsOcopy :: Pattern 
                         _lhsOoutput :: Pattern 
                         -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                         _lhsOerrors =
                             ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                              Seq.empty
                              {-# LINE 1533 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                         _lhsOinstVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              []
                              {-# LINE 1539 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                         _lhsOlocVars =
                             ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                              []
                              {-# LINE 1545 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              Underscore pos_
                              {-# LINE 1551 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _output =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              Underscore pos_
                              {-# LINE 1557 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 1563 "src-ag/ResolveLocals.hs" #-}
                              )
                         -- self rule
                         _lhsOoutput =
                             ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                              _output
                              {-# LINE 1569 "src-ag/ResolveLocals.hs" #-}
                              )
                     in  ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
-- Patterns ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         con                  : Identifier
         inh                  : Attributes
         nt                   : Identifier
         syn                  : Attributes
      synthesized attributes:
         copy                 : SELF 
         errors               : Seq Error
         instVars             : [Identifier]
         locVars              : [Identifier]
         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 (Identifier ->
                                  Attributes ->
                                  Identifier ->
                                  Attributes ->
                                  ( Patterns ,(Seq Error),([Identifier]),([Identifier]),Patterns ))
data Inh_Patterns  = Inh_Patterns {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),instVars_Syn_Patterns :: ([Identifier]),locVars_Syn_Patterns :: ([Identifier]),output_Syn_Patterns :: Patterns }
wrap_Patterns :: T_Patterns  ->
                 Inh_Patterns  ->
                 Syn_Patterns 
wrap_Patterns (T_Patterns sem ) (Inh_Patterns _lhsIcon _lhsIinh _lhsInt _lhsIsyn )  =
    (let ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput) = sem _lhsIcon _lhsIinh _lhsInt _lhsIsyn 
     in  (Syn_Patterns _lhsOcopy _lhsOerrors _lhsOinstVars _lhsOlocVars _lhsOoutput ))
sem_Patterns_Cons :: T_Pattern  ->
                     T_Patterns  ->
                     T_Patterns 
sem_Patterns_Cons (T_Pattern hd_ ) (T_Patterns tl_ )  =
    (T_Patterns (\ _lhsIcon
                   _lhsIinh
                   _lhsInt
                   _lhsIsyn ->
                     (let _lhsOerrors :: (Seq Error)
                          _lhsOinstVars :: ([Identifier])
                          _lhsOlocVars :: ([Identifier])
                          _lhsOcopy :: Patterns 
                          _lhsOoutput :: Patterns 
                          _hdOcon :: Identifier
                          _hdOinh :: Attributes
                          _hdOnt :: Identifier
                          _hdOsyn :: Attributes
                          _tlOcon :: Identifier
                          _tlOinh :: Attributes
                          _tlOnt :: Identifier
                          _tlOsyn :: Attributes
                          _hdIcopy :: Pattern 
                          _hdIerrors :: (Seq Error)
                          _hdIinstVars :: ([Identifier])
                          _hdIlocVars :: ([Identifier])
                          _hdIoutput :: Pattern 
                          _tlIcopy :: Patterns 
                          _tlIerrors :: (Seq Error)
                          _tlIinstVars :: ([Identifier])
                          _tlIlocVars :: ([Identifier])
                          _tlIoutput :: Patterns 
                          -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                          _lhsOerrors =
                              ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                               _hdIerrors Seq.>< _tlIerrors
                               {-# LINE 1652 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                          _lhsOinstVars =
                              ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                               _hdIinstVars ++ _tlIinstVars
                               {-# LINE 1658 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                          _lhsOlocVars =
                              ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                               _hdIlocVars ++ _tlIlocVars
                               {-# LINE 1664 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _copy =
                              ({-# LINE 22 "src-ag/Patterns.ag" #-}
                               (:) _hdIcopy _tlIcopy
                               {-# LINE 1670 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _output =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               (:) _hdIoutput _tlIoutput
                               {-# LINE 1676 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _lhsOcopy =
                              ({-# LINE 22 "src-ag/Patterns.ag" #-}
                               _copy
                               {-# LINE 1682 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _lhsOoutput =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               _output
                               {-# LINE 1688 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOcon =
                              ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                               _lhsIcon
                               {-# LINE 1694 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOinh =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIinh
                               {-# LINE 1700 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOnt =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsInt
                               {-# LINE 1706 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOsyn =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIsyn
                               {-# LINE 1712 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOcon =
                              ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                               _lhsIcon
                               {-# LINE 1718 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOinh =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIinh
                               {-# LINE 1724 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOnt =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsInt
                               {-# LINE 1730 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOsyn =
                              ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                               _lhsIsyn
                               {-# LINE 1736 "src-ag/ResolveLocals.hs" #-}
                               )
                          ( _hdIcopy,_hdIerrors,_hdIinstVars,_hdIlocVars,_hdIoutput) =
                              hd_ _hdOcon _hdOinh _hdOnt _hdOsyn 
                          ( _tlIcopy,_tlIerrors,_tlIinstVars,_tlIlocVars,_tlIoutput) =
                              tl_ _tlOcon _tlOinh _tlOnt _tlOsyn 
                      in  ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
sem_Patterns_Nil :: T_Patterns 
sem_Patterns_Nil  =
    (T_Patterns (\ _lhsIcon
                   _lhsIinh
                   _lhsInt
                   _lhsIsyn ->
                     (let _lhsOerrors :: (Seq Error)
                          _lhsOinstVars :: ([Identifier])
                          _lhsOlocVars :: ([Identifier])
                          _lhsOcopy :: Patterns 
                          _lhsOoutput :: Patterns 
                          -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                          _lhsOerrors =
                              ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                               Seq.empty
                               {-# LINE 1758 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                          _lhsOinstVars =
                              ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                               []
                               {-# LINE 1764 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                          _lhsOlocVars =
                              ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                               []
                               {-# LINE 1770 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _copy =
                              ({-# LINE 22 "src-ag/Patterns.ag" #-}
                               []
                               {-# LINE 1776 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _output =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               []
                               {-# LINE 1782 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _lhsOcopy =
                              ({-# LINE 22 "src-ag/Patterns.ag" #-}
                               _copy
                               {-# LINE 1788 "src-ag/ResolveLocals.hs" #-}
                               )
                          -- self rule
                          _lhsOoutput =
                              ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                               _output
                               {-# LINE 1794 "src-ag/ResolveLocals.hs" #-}
                               )
                      in  ( _lhsOcopy,_lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
-- Production --------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allnts               : [Identifier]
         inh                  : Attributes
         inhMap               : Map Identifier Attributes
         mergeMap             : Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))
         nt                   : Identifier
         options              : Options
         syn                  : Attributes
         synMap               : Map Identifier Attributes
      synthesized attributes:
         cons                 : [ConstructorIdent]
         errors               : Seq Error
         output               : SELF 
   alternatives:
      alternative Production:
         child con            : {ConstructorIdent}
         child params         : {[Identifier]}
         child constraints    : {[Type]}
         child children       : Children 
         child rules          : Rules 
         child typeSigs       : TypeSigs 
         child macro          : {MaybeMacro}
         visit 0:
            local allfields   : _
            local attrs       : _
            local inhnames    : _
            local synnames    : _
            local mergeMap    : _
            local output      : _
-}
-- cata
sem_Production :: Production  ->
                  T_Production 
sem_Production (Production _con _params _constraints _children _rules _typeSigs _macro )  =
    (sem_Production_Production _con _params _constraints (sem_Children _children ) (sem_Rules _rules ) (sem_TypeSigs _typeSigs ) _macro )
-- semantic domain
newtype T_Production  = T_Production (([Identifier]) ->
                                      Attributes ->
                                      (Map Identifier Attributes) ->
                                      (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))) ->
                                      Identifier ->
                                      Options ->
                                      Attributes ->
                                      (Map Identifier Attributes) ->
                                      ( ([ConstructorIdent]),(Seq Error),Production ))
data Inh_Production  = Inh_Production {allnts_Inh_Production :: ([Identifier]),inh_Inh_Production :: Attributes,inhMap_Inh_Production :: (Map Identifier Attributes),mergeMap_Inh_Production :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))),nt_Inh_Production :: Identifier,options_Inh_Production :: Options,syn_Inh_Production :: Attributes,synMap_Inh_Production :: (Map Identifier Attributes)}
data Syn_Production  = Syn_Production {cons_Syn_Production :: ([ConstructorIdent]),errors_Syn_Production :: (Seq Error),output_Syn_Production :: Production }
wrap_Production :: T_Production  ->
                   Inh_Production  ->
                   Syn_Production 
wrap_Production (T_Production sem ) (Inh_Production _lhsIallnts _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn _lhsIsynMap )  =
    (let ( _lhsOcons,_lhsOerrors,_lhsOoutput) = sem _lhsIallnts _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn _lhsIsynMap 
     in  (Syn_Production _lhsOcons _lhsOerrors _lhsOoutput ))
sem_Production_Production :: ConstructorIdent ->
                             ([Identifier]) ->
                             ([Type]) ->
                             T_Children  ->
                             T_Rules  ->
                             T_TypeSigs  ->
                             MaybeMacro ->
                             T_Production 
sem_Production_Production con_ params_ constraints_ (T_Children children_ ) (T_Rules rules_ ) (T_TypeSigs typeSigs_ ) macro_  =
    (T_Production (\ _lhsIallnts
                     _lhsIinh
                     _lhsIinhMap
                     _lhsImergeMap
                     _lhsInt
                     _lhsIoptions
                     _lhsIsyn
                     _lhsIsynMap ->
                       (let _lhsOcons :: ([ConstructorIdent])
                            _childrenOcon :: Identifier
                            _rulesOcon :: Identifier
                            _lhsOerrors :: (Seq Error)
                            _lhsOoutput :: Production 
                            _childrenOallfields :: ([(Identifier,Type,ChildKind)])
                            _childrenOallnts :: ([Identifier])
                            _childrenOattrs :: ([(Identifier,Identifier)])
                            _childrenOinh :: Attributes
                            _childrenOinhMap :: (Map Identifier Attributes)
                            _childrenOmergeMap :: (Map Identifier (Identifier,[Identifier]))
                            _childrenOnt :: Identifier
                            _childrenOsyn :: Attributes
                            _childrenOsynMap :: (Map Identifier Attributes)
                            _rulesOallfields :: ([(Identifier,Type,ChildKind)])
                            _rulesOallnts :: ([Identifier])
                            _rulesOattrs :: ([(Identifier,Identifier)])
                            _rulesOinh :: Attributes
                            _rulesOmergeMap :: (Map Identifier (Identifier,[Identifier]))
                            _rulesOnt :: Identifier
                            _rulesOoptions :: Options
                            _rulesOsyn :: Attributes
                            _childrenIattributes :: ([(Identifier,Attributes,Attributes)])
                            _childrenIfields :: ([(Identifier,Type,ChildKind)])
                            _childrenIoutput :: Children 
                            _rulesIerrors :: (Seq Error)
                            _rulesIinstVars :: ([Identifier])
                            _rulesIlocVars :: ([Identifier])
                            _rulesIoutput :: Rules 
                            _typeSigsIoutput :: TypeSigs 
                            -- "src-ag/ResolveLocals.ag"(line 67, column 18)
                            _lhsOcons =
                                ({-# LINE 67 "src-ag/ResolveLocals.ag" #-}
                                 [con_]
                                 {-# LINE 1904 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 74, column 16)
                            _allfields =
                                ({-# LINE 74 "src-ag/ResolveLocals.ag" #-}
                                 _childrenIfields
                                 {-# LINE 1910 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 74, column 16)
                            _attrs =
                                ({-# LINE 75 "src-ag/ResolveLocals.ag" #-}
                                 map ((,) _LOC)  _rulesIlocVars ++
                                 map ((,) _INST) _rulesIinstVars ++
                                 map ((,) _LHS)  _inhnames ++
                                 concat [map ((,) nm) (Map.keys as) | (nm,_,as) <- _childrenIattributes]
                                 {-# LINE 1919 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 74, column 16)
                            _inhnames =
                                ({-# LINE 79 "src-ag/ResolveLocals.ag" #-}
                                 Map.keys _lhsIinh
                                 {-# LINE 1925 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 74, column 16)
                            _synnames =
                                ({-# LINE 80 "src-ag/ResolveLocals.ag" #-}
                                 Map.keys _lhsIsyn
                                 {-# LINE 1931 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 108, column 16)
                            _childrenOcon =
                                ({-# LINE 108 "src-ag/ResolveLocals.ag" #-}
                                 con_
                                 {-# LINE 1937 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 110, column 16)
                            _rulesOcon =
                                ({-# LINE 110 "src-ag/ResolveLocals.ag" #-}
                                 con_
                                 {-# LINE 1943 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- "src-ag/ResolveLocals.ag"(line 129, column 32)
                            _mergeMap =
                                ({-# LINE 129 "src-ag/ResolveLocals.ag" #-}
                                 Map.findWithDefault Map.empty con_ _lhsImergeMap
                                 {-# LINE 1949 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                            _lhsOerrors =
                                ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                                 _rulesIerrors
                                 {-# LINE 1955 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- self rule
                            _output =
                                ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                 Production con_ params_ constraints_ _childrenIoutput _rulesIoutput _typeSigsIoutput macro_
                                 {-# LINE 1961 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- self rule
                            _lhsOoutput =
                                ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                 _output
                                 {-# LINE 1967 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (from local)
                            _childrenOallfields =
                                ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                                 _allfields
                                 {-# LINE 1973 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _childrenOallnts =
                                ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                                 _lhsIallnts
                                 {-# LINE 1979 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (from local)
                            _childrenOattrs =
                                ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                                 _attrs
                                 {-# LINE 1985 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _childrenOinh =
                                ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                 _lhsIinh
                                 {-# LINE 1991 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _childrenOinhMap =
                                ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                 _lhsIinhMap
                                 {-# LINE 1997 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (from local)
                            _childrenOmergeMap =
                                ({-# LINE 131 "src-ag/ResolveLocals.ag" #-}
                                 _mergeMap
                                 {-# LINE 2003 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _childrenOnt =
                                ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                 _lhsInt
                                 {-# LINE 2009 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _childrenOsyn =
                                ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                 _lhsIsyn
                                 {-# LINE 2015 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _childrenOsynMap =
                                ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                 _lhsIsynMap
                                 {-# LINE 2021 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (from local)
                            _rulesOallfields =
                                ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                                 _allfields
                                 {-# LINE 2027 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _rulesOallnts =
                                ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                                 _lhsIallnts
                                 {-# LINE 2033 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (from local)
                            _rulesOattrs =
                                ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                                 _attrs
                                 {-# LINE 2039 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _rulesOinh =
                                ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                 _lhsIinh
                                 {-# LINE 2045 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (from local)
                            _rulesOmergeMap =
                                ({-# LINE 131 "src-ag/ResolveLocals.ag" #-}
                                 _mergeMap
                                 {-# LINE 2051 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _rulesOnt =
                                ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                 _lhsInt
                                 {-# LINE 2057 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _rulesOoptions =
                                ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                                 _lhsIoptions
                                 {-# LINE 2063 "src-ag/ResolveLocals.hs" #-}
                                 )
                            -- copy rule (down)
                            _rulesOsyn =
                                ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                 _lhsIsyn
                                 {-# LINE 2069 "src-ag/ResolveLocals.hs" #-}
                                 )
                            ( _childrenIattributes,_childrenIfields,_childrenIoutput) =
                                children_ _childrenOallfields _childrenOallnts _childrenOattrs _childrenOcon _childrenOinh _childrenOinhMap _childrenOmergeMap _childrenOnt _childrenOsyn _childrenOsynMap 
                            ( _rulesIerrors,_rulesIinstVars,_rulesIlocVars,_rulesIoutput) =
                                rules_ _rulesOallfields _rulesOallnts _rulesOattrs _rulesOcon _rulesOinh _rulesOmergeMap _rulesOnt _rulesOoptions _rulesOsyn 
                            ( _typeSigsIoutput) =
                                typeSigs_ 
                        in  ( _lhsOcons,_lhsOerrors,_lhsOoutput))) )
-- Productions -------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allnts               : [Identifier]
         inh                  : Attributes
         inhMap               : Map Identifier Attributes
         mergeMap             : Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))
         nt                   : Identifier
         options              : Options
         syn                  : Attributes
         synMap               : Map Identifier Attributes
      synthesized attributes:
         cons                 : [ConstructorIdent]
         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 (([Identifier]) ->
                                        Attributes ->
                                        (Map Identifier Attributes) ->
                                        (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))) ->
                                        Identifier ->
                                        Options ->
                                        Attributes ->
                                        (Map Identifier Attributes) ->
                                        ( ([ConstructorIdent]),(Seq Error),Productions ))
data Inh_Productions  = Inh_Productions {allnts_Inh_Productions :: ([Identifier]),inh_Inh_Productions :: Attributes,inhMap_Inh_Productions :: (Map Identifier Attributes),mergeMap_Inh_Productions :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier]))),nt_Inh_Productions :: Identifier,options_Inh_Productions :: Options,syn_Inh_Productions :: Attributes,synMap_Inh_Productions :: (Map Identifier Attributes)}
data Syn_Productions  = Syn_Productions {cons_Syn_Productions :: ([ConstructorIdent]),errors_Syn_Productions :: (Seq Error),output_Syn_Productions :: Productions }
wrap_Productions :: T_Productions  ->
                    Inh_Productions  ->
                    Syn_Productions 
wrap_Productions (T_Productions sem ) (Inh_Productions _lhsIallnts _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn _lhsIsynMap )  =
    (let ( _lhsOcons,_lhsOerrors,_lhsOoutput) = sem _lhsIallnts _lhsIinh _lhsIinhMap _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn _lhsIsynMap 
     in  (Syn_Productions _lhsOcons _lhsOerrors _lhsOoutput ))
sem_Productions_Cons :: T_Production  ->
                        T_Productions  ->
                        T_Productions 
sem_Productions_Cons (T_Production hd_ ) (T_Productions tl_ )  =
    (T_Productions (\ _lhsIallnts
                      _lhsIinh
                      _lhsIinhMap
                      _lhsImergeMap
                      _lhsInt
                      _lhsIoptions
                      _lhsIsyn
                      _lhsIsynMap ->
                        (let _lhsOcons :: ([ConstructorIdent])
                             _lhsOerrors :: (Seq Error)
                             _lhsOoutput :: Productions 
                             _hdOallnts :: ([Identifier])
                             _hdOinh :: Attributes
                             _hdOinhMap :: (Map Identifier Attributes)
                             _hdOmergeMap :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
                             _hdOnt :: Identifier
                             _hdOoptions :: Options
                             _hdOsyn :: Attributes
                             _hdOsynMap :: (Map Identifier Attributes)
                             _tlOallnts :: ([Identifier])
                             _tlOinh :: Attributes
                             _tlOinhMap :: (Map Identifier Attributes)
                             _tlOmergeMap :: (Map ConstructorIdent (Map Identifier (Identifier,[Identifier])))
                             _tlOnt :: Identifier
                             _tlOoptions :: Options
                             _tlOsyn :: Attributes
                             _tlOsynMap :: (Map Identifier Attributes)
                             _hdIcons :: ([ConstructorIdent])
                             _hdIerrors :: (Seq Error)
                             _hdIoutput :: Production 
                             _tlIcons :: ([ConstructorIdent])
                             _tlIerrors :: (Seq Error)
                             _tlIoutput :: Productions 
                             -- use rule "src-ag/ResolveLocals.ag"(line 65, column 40)
                             _lhsOcons =
                                 ({-# LINE 65 "src-ag/ResolveLocals.ag" #-}
                                  _hdIcons ++ _tlIcons
                                  {-# LINE 2168 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                             _lhsOerrors =
                                 ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                                  _hdIerrors Seq.>< _tlIerrors
                                  {-# LINE 2174 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- self rule
                             _output =
                                 ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                  (:) _hdIoutput _tlIoutput
                                  {-# LINE 2180 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- self rule
                             _lhsOoutput =
                                 ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                  _output
                                  {-# LINE 2186 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOallnts =
                                 ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIallnts
                                  {-# LINE 2192 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOinh =
                                 ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIinh
                                  {-# LINE 2198 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOinhMap =
                                 ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                  _lhsIinhMap
                                  {-# LINE 2204 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOmergeMap =
                                 ({-# LINE 126 "src-ag/ResolveLocals.ag" #-}
                                  _lhsImergeMap
                                  {-# LINE 2210 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOnt =
                                 ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                  _lhsInt
                                  {-# LINE 2216 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOoptions =
                                 ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 2222 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOsyn =
                                 ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIsyn
                                  {-# LINE 2228 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _hdOsynMap =
                                 ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                  _lhsIsynMap
                                  {-# LINE 2234 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOallnts =
                                 ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIallnts
                                  {-# LINE 2240 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOinh =
                                 ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIinh
                                  {-# LINE 2246 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOinhMap =
                                 ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                  _lhsIinhMap
                                  {-# LINE 2252 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOmergeMap =
                                 ({-# LINE 126 "src-ag/ResolveLocals.ag" #-}
                                  _lhsImergeMap
                                  {-# LINE 2258 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOnt =
                                 ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                  _lhsInt
                                  {-# LINE 2264 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOoptions =
                                 ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 2270 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOsyn =
                                 ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                                  _lhsIsyn
                                  {-# LINE 2276 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- copy rule (down)
                             _tlOsynMap =
                                 ({-# LINE 12 "src-ag/DistChildAttr.ag" #-}
                                  _lhsIsynMap
                                  {-# LINE 2282 "src-ag/ResolveLocals.hs" #-}
                                  )
                             ( _hdIcons,_hdIerrors,_hdIoutput) =
                                 hd_ _hdOallnts _hdOinh _hdOinhMap _hdOmergeMap _hdOnt _hdOoptions _hdOsyn _hdOsynMap 
                             ( _tlIcons,_tlIerrors,_tlIoutput) =
                                 tl_ _tlOallnts _tlOinh _tlOinhMap _tlOmergeMap _tlOnt _tlOoptions _tlOsyn _tlOsynMap 
                         in  ( _lhsOcons,_lhsOerrors,_lhsOoutput))) )
sem_Productions_Nil :: T_Productions 
sem_Productions_Nil  =
    (T_Productions (\ _lhsIallnts
                      _lhsIinh
                      _lhsIinhMap
                      _lhsImergeMap
                      _lhsInt
                      _lhsIoptions
                      _lhsIsyn
                      _lhsIsynMap ->
                        (let _lhsOcons :: ([ConstructorIdent])
                             _lhsOerrors :: (Seq Error)
                             _lhsOoutput :: Productions 
                             -- use rule "src-ag/ResolveLocals.ag"(line 65, column 40)
                             _lhsOcons =
                                 ({-# LINE 65 "src-ag/ResolveLocals.ag" #-}
                                  []
                                  {-# LINE 2306 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                             _lhsOerrors =
                                 ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                                  Seq.empty
                                  {-# LINE 2312 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- self rule
                             _output =
                                 ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                  []
                                  {-# LINE 2318 "src-ag/ResolveLocals.hs" #-}
                                  )
                             -- self rule
                             _lhsOoutput =
                                 ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                                  _output
                                  {-# LINE 2324 "src-ag/ResolveLocals.hs" #-}
                                  )
                         in  ( _lhsOcons,_lhsOerrors,_lhsOoutput))) )
-- Rule --------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allfields            : [(Identifier,Type,ChildKind)]
         allnts               : [Identifier]
         attrs                : [(Identifier,Identifier)]
         con                  : Identifier
         inh                  : Attributes
         mergeMap             : Map Identifier (Identifier,[Identifier])
         nt                   : Identifier
         options              : Options
         syn                  : Attributes
      synthesized attributes:
         errors               : Seq Error
         instVars             : [Identifier]
         locVars              : [Identifier]
         output               : SELF 
   alternatives:
      alternative Rule:
         child mbName         : {Maybe Identifier}
         child pattern        : Pattern 
         child rhs            : Expression 
         child owrt           : {Bool}
         child origin         : {String}
         child explicit       : {Bool}
         child pure           : {Bool}
         child identity       : {Bool}
         child mbError        : {Maybe Error}
         child eager          : {Bool}
         visit 0:
            local output      : _
-}
-- cata
sem_Rule :: Rule  ->
            T_Rule 
sem_Rule (Rule _mbName _pattern _rhs _owrt _origin _explicit _pure _identity _mbError _eager )  =
    (sem_Rule_Rule _mbName (sem_Pattern _pattern ) (sem_Expression _rhs ) _owrt _origin _explicit _pure _identity _mbError _eager )
-- semantic domain
newtype T_Rule  = T_Rule (([(Identifier,Type,ChildKind)]) ->
                          ([Identifier]) ->
                          ([(Identifier,Identifier)]) ->
                          Identifier ->
                          Attributes ->
                          (Map Identifier (Identifier,[Identifier])) ->
                          Identifier ->
                          Options ->
                          Attributes ->
                          ( (Seq Error),([Identifier]),([Identifier]),Rule ))
data Inh_Rule  = Inh_Rule {allfields_Inh_Rule :: ([(Identifier,Type,ChildKind)]),allnts_Inh_Rule :: ([Identifier]),attrs_Inh_Rule :: ([(Identifier,Identifier)]),con_Inh_Rule :: Identifier,inh_Inh_Rule :: Attributes,mergeMap_Inh_Rule :: (Map Identifier (Identifier,[Identifier])),nt_Inh_Rule :: Identifier,options_Inh_Rule :: Options,syn_Inh_Rule :: Attributes}
data Syn_Rule  = Syn_Rule {errors_Syn_Rule :: (Seq Error),instVars_Syn_Rule :: ([Identifier]),locVars_Syn_Rule :: ([Identifier]),output_Syn_Rule :: Rule }
wrap_Rule :: T_Rule  ->
             Inh_Rule  ->
             Syn_Rule 
wrap_Rule (T_Rule sem ) (Inh_Rule _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn )  =
    (let ( _lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn 
     in  (Syn_Rule _lhsOerrors _lhsOinstVars _lhsOlocVars _lhsOoutput ))
sem_Rule_Rule :: (Maybe Identifier) ->
                 T_Pattern  ->
                 T_Expression  ->
                 Bool ->
                 String ->
                 Bool ->
                 Bool ->
                 Bool ->
                 (Maybe Error) ->
                 Bool ->
                 T_Rule 
sem_Rule_Rule mbName_ (T_Pattern pattern_ ) (T_Expression rhs_ ) owrt_ origin_ explicit_ pure_ identity_ mbError_ eager_  =
    (T_Rule (\ _lhsIallfields
               _lhsIallnts
               _lhsIattrs
               _lhsIcon
               _lhsIinh
               _lhsImergeMap
               _lhsInt
               _lhsIoptions
               _lhsIsyn ->
                 (let _lhsOerrors :: (Seq Error)
                      _lhsOinstVars :: ([Identifier])
                      _lhsOlocVars :: ([Identifier])
                      _lhsOoutput :: Rule 
                      _patternOcon :: Identifier
                      _patternOinh :: Attributes
                      _patternOnt :: Identifier
                      _patternOsyn :: Attributes
                      _rhsOallfields :: ([(Identifier,Type,ChildKind)])
                      _rhsOallnts :: ([Identifier])
                      _rhsOattrs :: ([(Identifier,Identifier)])
                      _rhsOcon :: Identifier
                      _rhsOmergeMap :: (Map Identifier (Identifier,[Identifier]))
                      _rhsOnt :: Identifier
                      _rhsOoptions :: Options
                      _patternIcopy :: Pattern 
                      _patternIerrors :: (Seq Error)
                      _patternIinstVars :: ([Identifier])
                      _patternIlocVars :: ([Identifier])
                      _patternIoutput :: Pattern 
                      _rhsIerrors :: (Seq Error)
                      _rhsIoutput :: Expression 
                      -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                      _lhsOerrors =
                          ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                           _patternIerrors Seq.>< _rhsIerrors
                           {-# LINE 2431 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                      _lhsOinstVars =
                          ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                           _patternIinstVars
                           {-# LINE 2437 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                      _lhsOlocVars =
                          ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                           _patternIlocVars
                           {-# LINE 2443 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- self rule
                      _output =
                          ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                           Rule mbName_ _patternIoutput _rhsIoutput owrt_ origin_ explicit_ pure_ identity_ mbError_ eager_
                           {-# LINE 2449 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- self rule
                      _lhsOoutput =
                          ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                           _output
                           {-# LINE 2455 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _patternOcon =
                          ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                           _lhsIcon
                           {-# LINE 2461 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _patternOinh =
                          ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                           _lhsIinh
                           {-# LINE 2467 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _patternOnt =
                          ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                           _lhsInt
                           {-# LINE 2473 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _patternOsyn =
                          ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                           _lhsIsyn
                           {-# LINE 2479 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _rhsOallfields =
                          ({-# LINE 139 "src-ag/ResolveLocals.ag" #-}
                           _lhsIallfields
                           {-# LINE 2485 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _rhsOallnts =
                          ({-# LINE 140 "src-ag/ResolveLocals.ag" #-}
                           _lhsIallnts
                           {-# LINE 2491 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _rhsOattrs =
                          ({-# LINE 141 "src-ag/ResolveLocals.ag" #-}
                           _lhsIattrs
                           {-# LINE 2497 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _rhsOcon =
                          ({-# LINE 138 "src-ag/ResolveLocals.ag" #-}
                           _lhsIcon
                           {-# LINE 2503 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _rhsOmergeMap =
                          ({-# LINE 131 "src-ag/ResolveLocals.ag" #-}
                           _lhsImergeMap
                           {-# LINE 2509 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _rhsOnt =
                          ({-# LINE 138 "src-ag/ResolveLocals.ag" #-}
                           _lhsInt
                           {-# LINE 2515 "src-ag/ResolveLocals.hs" #-}
                           )
                      -- copy rule (down)
                      _rhsOoptions =
                          ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                           _lhsIoptions
                           {-# LINE 2521 "src-ag/ResolveLocals.hs" #-}
                           )
                      ( _patternIcopy,_patternIerrors,_patternIinstVars,_patternIlocVars,_patternIoutput) =
                          pattern_ _patternOcon _patternOinh _patternOnt _patternOsyn 
                      ( _rhsIerrors,_rhsIoutput) =
                          rhs_ _rhsOallfields _rhsOallnts _rhsOattrs _rhsOcon _rhsOmergeMap _rhsOnt _rhsOoptions 
                  in  ( _lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
-- Rules -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allfields            : [(Identifier,Type,ChildKind)]
         allnts               : [Identifier]
         attrs                : [(Identifier,Identifier)]
         con                  : Identifier
         inh                  : Attributes
         mergeMap             : Map Identifier (Identifier,[Identifier])
         nt                   : Identifier
         options              : Options
         syn                  : Attributes
      synthesized attributes:
         errors               : Seq Error
         instVars             : [Identifier]
         locVars              : [Identifier]
         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 (([(Identifier,Type,ChildKind)]) ->
                            ([Identifier]) ->
                            ([(Identifier,Identifier)]) ->
                            Identifier ->
                            Attributes ->
                            (Map Identifier (Identifier,[Identifier])) ->
                            Identifier ->
                            Options ->
                            Attributes ->
                            ( (Seq Error),([Identifier]),([Identifier]),Rules ))
data Inh_Rules  = Inh_Rules {allfields_Inh_Rules :: ([(Identifier,Type,ChildKind)]),allnts_Inh_Rules :: ([Identifier]),attrs_Inh_Rules :: ([(Identifier,Identifier)]),con_Inh_Rules :: Identifier,inh_Inh_Rules :: Attributes,mergeMap_Inh_Rules :: (Map Identifier (Identifier,[Identifier])),nt_Inh_Rules :: Identifier,options_Inh_Rules :: Options,syn_Inh_Rules :: Attributes}
data Syn_Rules  = Syn_Rules {errors_Syn_Rules :: (Seq Error),instVars_Syn_Rules :: ([Identifier]),locVars_Syn_Rules :: ([Identifier]),output_Syn_Rules :: Rules }
wrap_Rules :: T_Rules  ->
              Inh_Rules  ->
              Syn_Rules 
wrap_Rules (T_Rules sem ) (Inh_Rules _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn )  =
    (let ( _lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput) = sem _lhsIallfields _lhsIallnts _lhsIattrs _lhsIcon _lhsIinh _lhsImergeMap _lhsInt _lhsIoptions _lhsIsyn 
     in  (Syn_Rules _lhsOerrors _lhsOinstVars _lhsOlocVars _lhsOoutput ))
sem_Rules_Cons :: T_Rule  ->
                  T_Rules  ->
                  T_Rules 
sem_Rules_Cons (T_Rule hd_ ) (T_Rules tl_ )  =
    (T_Rules (\ _lhsIallfields
                _lhsIallnts
                _lhsIattrs
                _lhsIcon
                _lhsIinh
                _lhsImergeMap
                _lhsInt
                _lhsIoptions
                _lhsIsyn ->
                  (let _lhsOerrors :: (Seq Error)
                       _lhsOinstVars :: ([Identifier])
                       _lhsOlocVars :: ([Identifier])
                       _lhsOoutput :: Rules 
                       _hdOallfields :: ([(Identifier,Type,ChildKind)])
                       _hdOallnts :: ([Identifier])
                       _hdOattrs :: ([(Identifier,Identifier)])
                       _hdOcon :: Identifier
                       _hdOinh :: Attributes
                       _hdOmergeMap :: (Map Identifier (Identifier,[Identifier]))
                       _hdOnt :: Identifier
                       _hdOoptions :: Options
                       _hdOsyn :: Attributes
                       _tlOallfields :: ([(Identifier,Type,ChildKind)])
                       _tlOallnts :: ([Identifier])
                       _tlOattrs :: ([(Identifier,Identifier)])
                       _tlOcon :: Identifier
                       _tlOinh :: Attributes
                       _tlOmergeMap :: (Map Identifier (Identifier,[Identifier]))
                       _tlOnt :: Identifier
                       _tlOoptions :: Options
                       _tlOsyn :: Attributes
                       _hdIerrors :: (Seq Error)
                       _hdIinstVars :: ([Identifier])
                       _hdIlocVars :: ([Identifier])
                       _hdIoutput :: Rule 
                       _tlIerrors :: (Seq Error)
                       _tlIinstVars :: ([Identifier])
                       _tlIlocVars :: ([Identifier])
                       _tlIoutput :: Rules 
                       -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                       _lhsOerrors =
                           ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                            _hdIerrors Seq.>< _tlIerrors
                            {-# LINE 2627 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                       _lhsOinstVars =
                           ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                            _hdIinstVars ++ _tlIinstVars
                            {-# LINE 2633 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                       _lhsOlocVars =
                           ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                            _hdIlocVars ++ _tlIlocVars
                            {-# LINE 2639 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- self rule
                       _output =
                           ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                            (:) _hdIoutput _tlIoutput
                            {-# LINE 2645 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- self rule
                       _lhsOoutput =
                           ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                            _output
                            {-# LINE 2651 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOallfields =
                           ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                            _lhsIallfields
                            {-# LINE 2657 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOallnts =
                           ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                            _lhsIallnts
                            {-# LINE 2663 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOattrs =
                           ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                            _lhsIattrs
                            {-# LINE 2669 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOcon =
                           ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                            _lhsIcon
                            {-# LINE 2675 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOinh =
                           ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                            _lhsIinh
                            {-# LINE 2681 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOmergeMap =
                           ({-# LINE 131 "src-ag/ResolveLocals.ag" #-}
                            _lhsImergeMap
                            {-# LINE 2687 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOnt =
                           ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                            _lhsInt
                            {-# LINE 2693 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOoptions =
                           ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                            _lhsIoptions
                            {-# LINE 2699 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _hdOsyn =
                           ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                            _lhsIsyn
                            {-# LINE 2705 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOallfields =
                           ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                            _lhsIallfields
                            {-# LINE 2711 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOallnts =
                           ({-# LINE 57 "src-ag/ResolveLocals.ag" #-}
                            _lhsIallnts
                            {-# LINE 2717 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOattrs =
                           ({-# LINE 71 "src-ag/ResolveLocals.ag" #-}
                            _lhsIattrs
                            {-# LINE 2723 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOcon =
                           ({-# LINE 105 "src-ag/ResolveLocals.ag" #-}
                            _lhsIcon
                            {-# LINE 2729 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOinh =
                           ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                            _lhsIinh
                            {-# LINE 2735 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOmergeMap =
                           ({-# LINE 131 "src-ag/ResolveLocals.ag" #-}
                            _lhsImergeMap
                            {-# LINE 2741 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOnt =
                           ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                            _lhsInt
                            {-# LINE 2747 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOoptions =
                           ({-# LINE 41 "src-ag/ResolveLocals.ag" #-}
                            _lhsIoptions
                            {-# LINE 2753 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- copy rule (down)
                       _tlOsyn =
                           ({-# LINE 104 "src-ag/ResolveLocals.ag" #-}
                            _lhsIsyn
                            {-# LINE 2759 "src-ag/ResolveLocals.hs" #-}
                            )
                       ( _hdIerrors,_hdIinstVars,_hdIlocVars,_hdIoutput) =
                           hd_ _hdOallfields _hdOallnts _hdOattrs _hdOcon _hdOinh _hdOmergeMap _hdOnt _hdOoptions _hdOsyn 
                       ( _tlIerrors,_tlIinstVars,_tlIlocVars,_tlIoutput) =
                           tl_ _tlOallfields _tlOallnts _tlOattrs _tlOcon _tlOinh _tlOmergeMap _tlOnt _tlOoptions _tlOsyn 
                   in  ( _lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
sem_Rules_Nil :: T_Rules 
sem_Rules_Nil  =
    (T_Rules (\ _lhsIallfields
                _lhsIallnts
                _lhsIattrs
                _lhsIcon
                _lhsIinh
                _lhsImergeMap
                _lhsInt
                _lhsIoptions
                _lhsIsyn ->
                  (let _lhsOerrors :: (Seq Error)
                       _lhsOinstVars :: ([Identifier])
                       _lhsOlocVars :: ([Identifier])
                       _lhsOoutput :: Rules 
                       -- use rule "src-ag/ResolveLocals.ag"(line 44, column 16)
                       _lhsOerrors =
                           ({-# LINE 44 "src-ag/ResolveLocals.ag" #-}
                            Seq.empty
                            {-# LINE 2785 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- use rule "src-ag/ResolveLocals.ag"(line 93, column 86)
                       _lhsOinstVars =
                           ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                            []
                            {-# LINE 2791 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- use rule "src-ag/ResolveLocals.ag"(line 93, column 48)
                       _lhsOlocVars =
                           ({-# LINE 93 "src-ag/ResolveLocals.ag" #-}
                            []
                            {-# LINE 2797 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- self rule
                       _output =
                           ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                            []
                            {-# LINE 2803 "src-ag/ResolveLocals.hs" #-}
                            )
                       -- self rule
                       _lhsOoutput =
                           ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                            _output
                            {-# LINE 2809 "src-ag/ResolveLocals.hs" #-}
                            )
                   in  ( _lhsOerrors,_lhsOinstVars,_lhsOlocVars,_lhsOoutput))) )
-- TypeSig -----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         output               : SELF 
   alternatives:
      alternative TypeSig:
         child name           : {Identifier}
         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  ->
                Inh_TypeSig  ->
                Syn_TypeSig 
wrap_TypeSig (T_TypeSig sem ) (Inh_TypeSig )  =
    (let ( _lhsOoutput) = sem 
     in  (Syn_TypeSig _lhsOoutput ))
sem_TypeSig_TypeSig :: Identifier ->
                       Type ->
                       T_TypeSig 
sem_TypeSig_TypeSig name_ tp_  =
    (T_TypeSig (let _lhsOoutput :: TypeSig 
                    -- self rule
                    _output =
                        ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                         TypeSig name_ tp_
                         {-# LINE 2848 "src-ag/ResolveLocals.hs" #-}
                         )
                    -- self rule
                    _lhsOoutput =
                        ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                         _output
                         {-# LINE 2854 "src-ag/ResolveLocals.hs" #-}
                         )
                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  ->
                 Inh_TypeSigs  ->
                 Syn_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 =
                         ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                          (:) _hdIoutput _tlIoutput
                          {-# LINE 2898 "src-ag/ResolveLocals.hs" #-}
                          )
                     -- self rule
                     _lhsOoutput =
                         ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                          _output
                          {-# LINE 2904 "src-ag/ResolveLocals.hs" #-}
                          )
                     ( _hdIoutput) =
                         hd_ 
                     ( _tlIoutput) =
                         tl_ 
                 in  ( _lhsOoutput)) )
sem_TypeSigs_Nil :: T_TypeSigs 
sem_TypeSigs_Nil  =
    (T_TypeSigs (let _lhsOoutput :: TypeSigs 
                     -- self rule
                     _output =
                         ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                          []
                          {-# LINE 2918 "src-ag/ResolveLocals.hs" #-}
                          )
                     -- self rule
                     _lhsOoutput =
                         ({-# LINE 47 "src-ag/ResolveLocals.ag" #-}
                          _output
                          {-# LINE 2924 "src-ag/ResolveLocals.hs" #-}
                          )
                 in  ( _lhsOoutput)) )