packages feed

uuagc-0.9.42.1: src-generated/ExecutionPlan2Caml.hs


-- UUAGC 0.9.42.0 (src-ag/ExecutionPlan2Caml.ag)
module ExecutionPlan2Caml where
{-# LINE 32 "./src-ag/ExecutionPlan2Caml.ag" #-}

import ExecutionPlan
import Pretty
import PPUtil
import Options
import Data.Monoid(mappend,mempty)
import Data.Maybe
import Data.Graph
import Debug.Trace
import System.IO
import System.Directory
import System.FilePath
import UU.Scanner.Position

import TokenDef
import HsToken
import ErrorMessages

import Data.Set (Set)
import qualified Data.Set as Set
import Data.Map (Map)
import qualified Data.Map as Map
import Data.Sequence(Seq)
import qualified Data.Sequence as Seq
import Data.Foldable(toList)
{-# LINE 32 "dist/build/ExecutionPlan2Caml.hs" #-}

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

-- VisitSyntax.ag imports
import Patterns    (Pattern(..),Patterns)
import Expression  (Expression(..))
import CommonTypes
import ErrorMessages

import qualified Data.Set as Set
import Data.Set(Set)
import qualified Data.Map as Map
import Data.Map(Map)
{-# LINE 46 "dist/build/ExecutionPlan2Caml.hs" #-}

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

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

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

import UU.Scanner.Position(Pos)
import HsToken
{-# LINE 59 "dist/build/ExecutionPlan2Caml.hs" #-}

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

import CommonTypes
import UU.Scanner.Position(Pos)
{-# LINE 65 "dist/build/ExecutionPlan2Caml.hs" #-}
{-# LINE 173 "./src-ag/ExecutionPlan2Caml.ag" #-}

ppRecordTp :: PP a => [a] -> PP_Doc
ppRecordTp es
  | null es   = text "unit"
  | otherwise = pp_block "{" "}" "; " (map pp es)

ppRecordVal :: PP a => [a] -> PP_Doc
ppRecordVal es
  | null es   = text "()"
  | otherwise = pp_block "{" "}" "; " (map pp es)

ppFieldsVal :: Bool -> [(PP_Doc,PP_Doc,PP_Doc,PP_Doc)] -> PP_Doc
ppFieldsVal record fields
  | null fields = text "()"
  | record      = ppRecordVal [ r >#< "=" >#< x | (r,x,_,_) <- fields ]
  | otherwise   = pp_block "(" ")" "," [ x | (_,x,_,_) <- fields ]

ppFieldsType :: Bool -> Bool -> [(PP_Doc,PP_Doc,PP_Doc,PP_Doc)] -> PP_Doc
ppFieldsType record defor fields
  | null fields = text "unit"
  | record      = ppRecordTp [ r >#< ":" >#< (if defor then d else f) | (r,_,d,f) <- fields ]
  | otherwise   = pp_block "(" ")" "*" [ if defor then d else f | (_,_,d,f) <- fields ]
{-# LINE 89 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 285 "./src-ag/ExecutionPlan2Caml.ag" #-}

ppTp :: Type -> PP_Doc
ppTp tp = case tp of
  Haskell t -> pp t   -- ocaml type
  NT nt tps deforested
    | nt == _SELF -> pp "?SELF?"
    | null tps    -> ppNontTp nt deforested
    | otherwise   -> pp_parens (ppSpaced (map pp_parens tps) >#< ppNontTp nt deforested)
  Self -> pp "?SELF?"

ppNontTp :: NontermIdent -> Bool -> PP_Doc
ppNontTp nt True  = pp "t_" >|< pp nt
ppNontTp nt False = pp nt

-- multiple type parameters go into a tuple
ppTypeParams :: PP a => [a] -> PP_Doc
ppTypeParams []  = empty
ppTypeParams [x] = pp x
ppTypeParams xs  = pp_block "(" ")" "," (map pp xs)
{-# LINE 111 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 357 "./src-ag/ExecutionPlan2Caml.ag" #-}

-- convention for nonterminals to module names
modName :: NontermIdent -> PP_Doc
modName nt = pp "M_" >|< pp nt

ppFunDecl :: Bool -> PP_Doc -> [(PP_Doc,PP_Doc)] -> PP_Doc -> PP_Doc -> PP_Doc
ppFunDecl gensigs nm args resSig expr = body where
  body = nm >#< ppSpaced (map arg args) >#< ppRes >#< "="
         >-< indent 2 expr
  arg (arg,tp) = ppArg gensigs arg tp
  ppRes
    | gensigs  = ":" >#< resSig
    | otherwise = empty

ppArg :: Bool -> PP_Doc -> PP_Doc -> PP_Doc
ppArg gensigs arg tp
  | gensigs   = pp_parens (arg >#< ":" >#< tp)
  | otherwise = arg

{-# LINE 133 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 424 "./src-ag/ExecutionPlan2Caml.ag" #-}
type VisitStateState = (VisitIdentifier,StateIdentifier, StateIdentifier)
{-# LINE 137 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 460 "./src-ag/ExecutionPlan2Caml.ag" #-}

--
-- conventions
--

-- type of the state of a node: a closure containing the children states and attributes,
-- with code of type 'type_nt_sem' that represents the subsequent visits to successor states.
type_nt_state nt st = "s_" >|< nt >|< "_" >|< st

-- type of a visit to a node (the initial, and when in a given state)
-- an instance of this type is called the "semantics"
type_nt_sem_top nt = "t_" >|< nt
type_nt_sem nt st = type_nt_sem_top nt >|< "_s" >|< st

-- type of a caller (contains visit selection + inputs + continuation)
type_caller nt st = "c_" >|< nt >|< "_s" >|< st

-- names of records
nm_attach nt = "attach_">|< nt
nm_invoke nt st = "inv_" >|< nt >|< "_s" >|< st

-- name of the type variable representing the result type of the continuation
cont_tvar = text "'cont__"


-- order states in reverse topological order so that successor states are
-- earlier in the resulting list.
orderStates :: StateIdentifier -> [VisitStateState] -> [StateIdentifier]
orderStates initial edges = res where
  source  = Map.singleton initial Set.empty  -- ensures that the initial state is in graph even when there are no edges
  targets = [ Map.singleton t Set.empty | (_,_,t) <- edges ]
  deps    = [ Map.singleton f (Set.singleton t) | (_,f,t) <- edges ]

  mp  = Map.unionsWith Set.union (source : (targets ++ deps))
  es  = [ (f,f,Set.toList ts) | (f,ts) <- Map.toList mp ]
  cps = stronglyConnComp es
  res = flattenSCCs cps
{-# LINE 177 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 517 "./src-ag/ExecutionPlan2Caml.ag" #-}

type_caller_visit nt v = "c_" >|< nt >|< "_v" >|< v
con_visit nt v = "C_" >|< nt >|< "_v" >|< v

-- field names
nm_inh nt v  = "inh_" >|< nt >|< "_v" >|< v
nm_cont nt v = "cont_" >|< nt >|< "_v" >|< v
{-# LINE 187 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 563 "./src-ag/ExecutionPlan2Caml.ag" #-}

-- more naming conventions
nm_inarg nm nt v = "i_" >|< nm >|< "_" >|< nt >|< "_v" >|< v
nm_outarg nm nt v = "o_" >|< nm >|< "_" >|< nt >|< "_v" >|< v
nm_outarg_cont = nm_outarg "_cont"

conNmTVisit nt vId      = "t_" >|< nt >|< "_v"    >|< vId
conNmTVisitIn nt vId    = "t_" >|< nt >|< "_vIn"  >|< vId
conNmTVisitOut nt vId   = "t_" >|< nt >|< "_vOut" >|< vId

-- todo: remove ppMonadType
ppMonadType :: Options -> PP_Doc
ppMonadType opts
  | parallelInvoke opts = text "IO"
  | otherwise           = text "Identity"
{-# LINE 205 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 776 "./src-ag/ExecutionPlan2Caml.ag" #-}

nm_visit v = "__v" >|< v
nm_k st = "__k" >|< st
nm_st st = "__st" >|< st

mklets :: (PP b, PP c) => [b] -> c -> PP_Doc
mklets defs body = res where
  ppLet def = "let" >#< def >#< "in"
  res = vlist (map ppLet defs) >-< body
{-# LINE 217 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 818 "./src-ag/ExecutionPlan2Caml.ag" #-}

resultValName :: String
resultValName = "__result_"

nextStName :: String
nextStName = "__st_"
{-# LINE 226 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 959 "./src-ag/ExecutionPlan2Caml.ag" #-}

stname :: Identifier -> Int -> String
stname child st = "_" ++ getName child ++ "X" ++ show st

-- should actually return some conversion info
compatibleAttach :: VisitKind -> NontermIdent -> Options -> Bool
compatibleAttach _ _ _ = True
{-# LINE 236 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 1026 "./src-ag/ExecutionPlan2Caml.ag" #-}

dummyPat :: Options -> Bool -> PP_Doc
dummyPat opts noArgs
  | not noArgs            = empty
  | strictDummyToken opts = text "()"
  | otherwise             = text "(_ : unit)"

dummyArg :: Options -> Bool -> PP_Doc
dummyArg opts noArgs
  | not noArgs            = empty
  | otherwise             = text "()"

dummyType :: Options -> Bool -> PP_Doc
dummyType opts noArgs
  | not noArgs            = empty
  | otherwise             = text "unit"
{-# LINE 255 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 1102 "./src-ag/ExecutionPlan2Caml.ag" #-}

data NonLocalAttr
  = AttrInh Identifier Identifier
  | AttrSyn Identifier Identifier deriving Show

mkNonLocalAttr :: Bool -> Identifier -> Identifier -> NonLocalAttr
mkNonLocalAttr True  = AttrInh  -- True: inherited attr
mkNonLocalAttr False = AttrSyn

lookupAttrType :: NonLocalAttr -> Map Identifier Attributes -> Map Identifier Attributes -> Map Identifier Type -> Maybe PP_Doc
lookupAttrType (AttrInh child name) inhs _ = lookupType child name inhs
lookupAttrType (AttrSyn child name) _ syns = lookupType child name syns

-- Note: if the child takes type parameters, the type of an attribute of this child may refer to these parameters. This means that
-- the actual type of the attribute needs to have its type parameters substituted with the actual type argument of the child.
-- However, for now we simply decide to return Nothing in this case, which skips the type annotation.
lookupType :: Identifier -> Identifier -> Map Identifier Attributes -> Map Identifier Type -> Maybe PP_Doc
lookupType child name attrMp childMp
  | noParameters childTp = Just ppDoc
  | otherwise            = Nothing
  where
    attrTp     = Map.findWithDefault (error "lookupType: the attribute is not in the attrs of the child") name childAttrs
    childAttrs = Map.findWithDefault (error "lookupType: the attributes of the nonterm are not in the map") nonterm attrMp
    nonterm    = extractNonterminal childTp
    childTp    = Map.findWithDefault (error ("lookupType: the child " ++ show child ++ "is not in the appropriate map")) child childMp
    ppDoc      = ppTp attrTp

noParameters :: Type -> Bool
noParameters (Haskell _)   = True
noParameters (NT _ args _) = null args
{-# LINE 288 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 1199 "./src-ag/ExecutionPlan2Caml.ag" #-}

contNm = text "__cont_"
inpsNm = text "__inps_"

-- a `compatibleKind` b  means: can kind b be invoked from a
compatibleKind :: VisitKind -> VisitKind -> Bool
compatibleKind _              _             = True

compatibleRule :: VisitKind -> Bool -> Bool
compatibleRule (VisitPure _) False = False
compatibleRule _             _     = True
{-# LINE 302 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 1224 "./src-ag/ExecutionPlan2Caml.ag" #-}

unionWithSum = Map.unionWith (+)
{-# LINE 307 "dist/build/ExecutionPlan2Caml.hs" #-}

{-# LINE 1247 "./src-ag/ExecutionPlan2Caml.ag" #-}

uwSetUnion :: (Ord a, Ord b) => Map a (Set b) -> Map a (Set b) -> Map a (Set b)
uwSetUnion = Map.unionWith Set.union

uwMapUnion :: (Ord a, Ord b) => Map a (Map b c) -> Map a (Map b c) -> Map a (Map b c)
uwMapUnion = Map.unionWith Map.union
{-# LINE 316 "dist/build/ExecutionPlan2Caml.hs" #-}
-- EChild ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allInitStates        : Map NontermIdent Int
         con                  : ConstructorIdent
         mainFile             : String
         mainName             : String
         nt                   : NontermIdent
         options              : Options
      synthesized attributes:
         argnamesw            :  PP_Doc 
         childTypes           : Map Identifier Type
         childintros          : Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))
         sigs                 : [(PP_Doc,PP_Doc,PP_Doc,PP_Doc)]
         terminaldefs         : Set String
   alternatives:
      alternative EChild:
         child name           : {Identifier}
         child tp             : {Type}
         child kind           : {ChildKind}
         child hasAround      : {Bool}
         child merges         : {Maybe [Identifier]}
         child isMerged       : {Bool}
         visit 0:
            local tpDocFor    : _
            local tpDocDefor  : _
            local fieldNm     : _
            local childNm     : _
            local field       : _
            local isDefor     : _
            local valcode     : _
            local aroundcode  : _
            local introcode   : _
            local nt          : _
            local initSt      : _
      alternative ETerm:
         child name           : {Identifier}
         child tp             : {Type}
         visit 0:
            local tpDocFor    : _
            local tpDocDefor  : _
            local fieldNm     : _
            local childNm     : _
            local field       : _
-}
-- cata
sem_EChild :: EChild ->
              T_EChild
sem_EChild (EChild _name _tp _kind _hasAround _merges _isMerged) =
    (sem_EChild_EChild _name _tp _kind _hasAround _merges _isMerged)
sem_EChild (ETerm _name _tp) =
    (sem_EChild_ETerm _name _tp)
-- semantic domain
newtype T_EChild = T_EChild ((Map NontermIdent Int) ->
                             ConstructorIdent ->
                             String ->
                             String ->
                             NontermIdent ->
                             Options ->
                             ( ( PP_Doc ),(Map Identifier Type),(Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)]),(Set String)))
data Inh_EChild = Inh_EChild {allInitStates_Inh_EChild :: (Map NontermIdent Int),con_Inh_EChild :: ConstructorIdent,mainFile_Inh_EChild :: String,mainName_Inh_EChild :: String,nt_Inh_EChild :: NontermIdent,options_Inh_EChild :: Options}
data Syn_EChild = Syn_EChild {argnamesw_Syn_EChild :: ( PP_Doc ),childTypes_Syn_EChild :: (Map Identifier Type),childintros_Syn_EChild :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),sigs_Syn_EChild :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)]),terminaldefs_Syn_EChild :: (Set String)}
wrap_EChild :: T_EChild ->
               Inh_EChild ->
               Syn_EChild
wrap_EChild (T_EChild sem) (Inh_EChild _lhsIallInitStates _lhsIcon _lhsImainFile _lhsImainName _lhsInt _lhsIoptions) =
    (let ( _lhsOargnamesw,_lhsOchildTypes,_lhsOchildintros,_lhsOsigs,_lhsOterminaldefs) = sem _lhsIallInitStates _lhsIcon _lhsImainFile _lhsImainName _lhsInt _lhsIoptions
     in  (Syn_EChild _lhsOargnamesw _lhsOchildTypes _lhsOchildintros _lhsOsigs _lhsOterminaldefs))
sem_EChild_EChild :: Identifier ->
                     Type ->
                     ChildKind ->
                     Bool ->
                     (Maybe [Identifier]) ->
                     Bool ->
                     T_EChild
sem_EChild_EChild name_ tp_ kind_ hasAround_ merges_ isMerged_ =
    (T_EChild (\ _lhsIallInitStates
                 _lhsIcon
                 _lhsImainFile
                 _lhsImainName
                 _lhsInt
                 _lhsIoptions ->
                   (let _lhsOsigs :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)])
                        _lhsOargnamesw :: ( PP_Doc )
                        _lhsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                        _lhsOchildTypes :: (Map Identifier Type)
                        _lhsOterminaldefs :: (Set String)
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 275, column 7)
                        _tpDocFor =
                            ({-# LINE 275 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             ppTp $ removeDeforested tp_
                             {-# LINE 409 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 276, column 7)
                        _tpDocDefor =
                            ({-# LINE 276 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             ppTp $ forceDeforested tp_
                             {-# LINE 415 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 277, column 7)
                        _fieldNm =
                            ({-# LINE 277 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             text $ recordFieldname _lhsInt _lhsIcon name_
                             {-# LINE 421 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 278, column 7)
                        _childNm =
                            ({-# LINE 278 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             text (fieldname name_)
                             {-# LINE 427 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 279, column 7)
                        _field =
                            ({-# LINE 279 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             (_fieldNm    , _childNm    , _tpDocDefor    , _tpDocFor    )
                             {-# LINE 433 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 280, column 13)
                        _lhsOsigs =
                            ({-# LINE 280 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             case kind_ of
                               ChildAttr -> []
                               _         -> [_field    ]
                             {-# LINE 441 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 392, column 12)
                        _lhsOargnamesw =
                            ({-# LINE 392 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             case kind_ of
                               ChildSyntax     -> "(" >#< prefix _lhsIoptions >|< _nt     >#< name_ >|< "_" >#< ")"
                               ChildAttr       -> empty
                               ChildReplace tp -> "(" >#< prefix _lhsIoptions >|< extractNonterminal tp >#< name_ >|< "_" >#< ")"
                             {-# LINE 450 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 919, column 12)
                        _lhsOchildintros =
                            ({-# LINE 919 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.singleton name_ _introcode
                             {-# LINE 456 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 920, column 12)
                        _isDefor =
                            ({-# LINE 920 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             case tp_ of
                               NT _ _ defor -> defor
                               _            -> False
                             {-# LINE 464 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 923, column 12)
                        _valcode =
                            ({-# LINE 923 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             case kind_ of
                               ChildSyntax -> name_ >|< "_"
                               ChildAttr   ->
                                              let head | not _isDefor     = if lateHigherOrderBinding _lhsIoptions
                                                                            then lateSemNtLabel _nt     >#< lhsname True idLateBindingAttr
                                                                            else prefix _lhsIoptions >|< _nt
                                                       | otherwise        = empty
                                              in pp_parens (head >#< instname name_)
                               ChildReplace _ ->
                                                 pp_parens (instname name_ >#< name_ >|< "_")
                             {-# LINE 479 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 934, column 12)
                        _aroundcode =
                            ({-# LINE 934 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             if hasAround_
                             then locname name_ >|< "_around"
                             else empty
                             {-# LINE 487 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 937, column 12)
                        _introcode =
                            ({-# LINE 937 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             \kind -> let pat    = text $ stname name_ _initSt
                                          attach = pp_parens (_aroundcode     >#< _valcode    ) >|< "." >|< nm_attach _nt     >#< "()"
                                          decl   = pat >#< "=" >#< attach
                                      in if compatibleAttach kind _nt     _lhsIoptions
                                         then Right ( "let" >#< decl >#< "in"
                                                    , Set.singleton (stname name_ _initSt    )
                                                    , case kind_ of
                                                        ChildAttr   -> Map.insert (instname name_) Nothing $
                                                                         ( if _isDefor     || not (lateHigherOrderBinding _lhsIoptions)
                                                                           then id
                                                                           else Map.insert (lhsname True idLateBindingAttr) (Just $ AttrInh _LHS idLateBindingAttr)
                                                                         ) $
                                                                         ( if hasAround_
                                                                           then Map.insert (locname (name_) ++ "_around") Nothing
                                                                           else id
                                                                         ) $ Map.empty
                                                        ChildReplace _ -> Map.singleton (instname name_) Nothing
                                                        ChildSyntax    -> Map.empty
                                                    )
                                         else Left $ IncompatibleAttachKind name_ kind
                             {-# LINE 512 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 957, column 12)
                        _nt =
                            ({-# LINE 957 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             extractNonterminal tp_
                             {-# LINE 518 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 1419, column 3)
                        _lhsOchildTypes =
                            ({-# LINE 1419 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.singleton name_ tp_
                             {-# LINE 524 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 1463, column 3)
                        _initSt =
                            ({-# LINE 1463 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.findWithDefault (error "nonterminal not in allInitStates map") _nt     _lhsIallInitStates
                             {-# LINE 530 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1258, column 42)
                        _lhsOterminaldefs =
                            ({-# LINE 1258 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Set.empty
                             {-# LINE 536 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                    in  ( _lhsOargnamesw,_lhsOchildTypes,_lhsOchildintros,_lhsOsigs,_lhsOterminaldefs))))
sem_EChild_ETerm :: Identifier ->
                    Type ->
                    T_EChild
sem_EChild_ETerm name_ tp_ =
    (T_EChild (\ _lhsIallInitStates
                 _lhsIcon
                 _lhsImainFile
                 _lhsImainName
                 _lhsInt
                 _lhsIoptions ->
                   (let _lhsOsigs :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)])
                        _lhsOargnamesw :: ( PP_Doc )
                        _lhsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                        _lhsOterminaldefs :: (Set String)
                        _lhsOchildTypes :: (Map Identifier Type)
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 275, column 7)
                        _tpDocFor =
                            ({-# LINE 275 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             ppTp $ removeDeforested tp_
                             {-# LINE 558 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 276, column 7)
                        _tpDocDefor =
                            ({-# LINE 276 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             ppTp $ forceDeforested tp_
                             {-# LINE 564 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 277, column 7)
                        _fieldNm =
                            ({-# LINE 277 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             text $ recordFieldname _lhsInt _lhsIcon name_
                             {-# LINE 570 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 278, column 7)
                        _childNm =
                            ({-# LINE 278 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             text (fieldname name_)
                             {-# LINE 576 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 279, column 7)
                        _field =
                            ({-# LINE 279 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             (_fieldNm    , _childNm    , _tpDocDefor    , _tpDocFor    )
                             {-# LINE 582 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 283, column 13)
                        _lhsOsigs =
                            ({-# LINE 283 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             [_field    ]
                             {-# LINE 588 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 396, column 12)
                        _lhsOargnamesw =
                            ({-# LINE 396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             text $ fieldname name_
                             {-# LINE 594 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 918, column 12)
                        _lhsOchildintros =
                            ({-# LINE 918 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.singleton name_ (\_ -> Right (empty, Set.empty, Map.empty))
                             {-# LINE 600 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 1261, column 3)
                        _lhsOterminaldefs =
                            ({-# LINE 1261 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Set.singleton $ fieldname name_
                             {-# LINE 606 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- "./src-ag/ExecutionPlan2Caml.ag"(line 1419, column 3)
                        _lhsOchildTypes =
                            ({-# LINE 1419 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.singleton name_ tp_
                             {-# LINE 612 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                    in  ( _lhsOargnamesw,_lhsOchildTypes,_lhsOchildintros,_lhsOsigs,_lhsOterminaldefs))))
-- EChildren ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allInitStates        : Map NontermIdent Int
         con                  : ConstructorIdent
         mainFile             : String
         mainName             : String
         nt                   : NontermIdent
         options              : Options
      synthesized attributes:
         argnamesw            : [PP_Doc]
         childTypes           : Map Identifier Type
         childintros          : Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))
         sigs                 : [(PP_Doc,PP_Doc,PP_Doc,PP_Doc)]
         terminaldefs         : Set String
   alternatives:
      alternative Cons:
         child hd             : EChild 
         child tl             : EChildren 
      alternative Nil:
-}
-- cata
sem_EChildren :: EChildren ->
                 T_EChildren
sem_EChildren list =
    (Prelude.foldr sem_EChildren_Cons sem_EChildren_Nil (Prelude.map sem_EChild list))
-- semantic domain
newtype T_EChildren = T_EChildren ((Map NontermIdent Int) ->
                                   ConstructorIdent ->
                                   String ->
                                   String ->
                                   NontermIdent ->
                                   Options ->
                                   ( ([PP_Doc]),(Map Identifier Type),(Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)]),(Set String)))
data Inh_EChildren = Inh_EChildren {allInitStates_Inh_EChildren :: (Map NontermIdent Int),con_Inh_EChildren :: ConstructorIdent,mainFile_Inh_EChildren :: String,mainName_Inh_EChildren :: String,nt_Inh_EChildren :: NontermIdent,options_Inh_EChildren :: Options}
data Syn_EChildren = Syn_EChildren {argnamesw_Syn_EChildren :: ([PP_Doc]),childTypes_Syn_EChildren :: (Map Identifier Type),childintros_Syn_EChildren :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),sigs_Syn_EChildren :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)]),terminaldefs_Syn_EChildren :: (Set String)}
wrap_EChildren :: T_EChildren ->
                  Inh_EChildren ->
                  Syn_EChildren
wrap_EChildren (T_EChildren sem) (Inh_EChildren _lhsIallInitStates _lhsIcon _lhsImainFile _lhsImainName _lhsInt _lhsIoptions) =
    (let ( _lhsOargnamesw,_lhsOchildTypes,_lhsOchildintros,_lhsOsigs,_lhsOterminaldefs) = sem _lhsIallInitStates _lhsIcon _lhsImainFile _lhsImainName _lhsInt _lhsIoptions
     in  (Syn_EChildren _lhsOargnamesw _lhsOchildTypes _lhsOchildintros _lhsOsigs _lhsOterminaldefs))
sem_EChildren_Cons :: T_EChild ->
                      T_EChildren ->
                      T_EChildren
sem_EChildren_Cons (T_EChild hd_) (T_EChildren tl_) =
    (T_EChildren (\ _lhsIallInitStates
                    _lhsIcon
                    _lhsImainFile
                    _lhsImainName
                    _lhsInt
                    _lhsIoptions ->
                      (let _lhsOargnamesw :: ([PP_Doc])
                           _lhsOchildTypes :: (Map Identifier Type)
                           _lhsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                           _lhsOsigs :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)])
                           _lhsOterminaldefs :: (Set String)
                           _hdOallInitStates :: (Map NontermIdent Int)
                           _hdOcon :: ConstructorIdent
                           _hdOmainFile :: String
                           _hdOmainName :: String
                           _hdOnt :: NontermIdent
                           _hdOoptions :: Options
                           _tlOallInitStates :: (Map NontermIdent Int)
                           _tlOcon :: ConstructorIdent
                           _tlOmainFile :: String
                           _tlOmainName :: String
                           _tlOnt :: NontermIdent
                           _tlOoptions :: Options
                           _hdIargnamesw :: ( PP_Doc )
                           _hdIchildTypes :: (Map Identifier Type)
                           _hdIchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                           _hdIsigs :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)])
                           _hdIterminaldefs :: (Set String)
                           _tlIargnamesw :: ([PP_Doc])
                           _tlIchildTypes :: (Map Identifier Type)
                           _tlIchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                           _tlIsigs :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)])
                           _tlIterminaldefs :: (Set String)
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 389, column 32)
                           _lhsOargnamesw =
                               ({-# LINE 389 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _hdIargnamesw : _tlIargnamesw
                                {-# LINE 699 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1412, column 40)
                           _lhsOchildTypes =
                               ({-# LINE 1412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _hdIchildTypes `mappend` _tlIchildTypes
                                {-# LINE 705 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 909, column 21)
                           _lhsOchildintros =
                               ({-# LINE 909 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _hdIchildintros `Map.union` _tlIchildintros
                                {-# LINE 711 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 271, column 34)
                           _lhsOsigs =
                               ({-# LINE 271 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _hdIsigs ++ _tlIsigs
                                {-# LINE 717 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1258, column 42)
                           _lhsOterminaldefs =
                               ({-# LINE 1258 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _hdIterminaldefs `Set.union` _tlIterminaldefs
                                {-# LINE 723 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOallInitStates =
                               ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallInitStates
                                {-# LINE 729 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOcon =
                               ({-# LINE 86 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIcon
                                {-# LINE 735 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOmainFile =
                               ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsImainFile
                                {-# LINE 741 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOmainName =
                               ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsImainName
                                {-# LINE 747 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOnt =
                               ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsInt
                                {-# LINE 753 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _hdOoptions =
                               ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIoptions
                                {-# LINE 759 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOallInitStates =
                               ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallInitStates
                                {-# LINE 765 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOcon =
                               ({-# LINE 86 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIcon
                                {-# LINE 771 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOmainFile =
                               ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsImainFile
                                {-# LINE 777 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOmainName =
                               ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsImainName
                                {-# LINE 783 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOnt =
                               ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsInt
                                {-# LINE 789 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _tlOoptions =
                               ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIoptions
                                {-# LINE 795 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           ( _hdIargnamesw,_hdIchildTypes,_hdIchildintros,_hdIsigs,_hdIterminaldefs) =
                               hd_ _hdOallInitStates _hdOcon _hdOmainFile _hdOmainName _hdOnt _hdOoptions
                           ( _tlIargnamesw,_tlIchildTypes,_tlIchildintros,_tlIsigs,_tlIterminaldefs) =
                               tl_ _tlOallInitStates _tlOcon _tlOmainFile _tlOmainName _tlOnt _tlOoptions
                       in  ( _lhsOargnamesw,_lhsOchildTypes,_lhsOchildintros,_lhsOsigs,_lhsOterminaldefs))))
sem_EChildren_Nil :: T_EChildren
sem_EChildren_Nil =
    (T_EChildren (\ _lhsIallInitStates
                    _lhsIcon
                    _lhsImainFile
                    _lhsImainName
                    _lhsInt
                    _lhsIoptions ->
                      (let _lhsOargnamesw :: ([PP_Doc])
                           _lhsOchildTypes :: (Map Identifier Type)
                           _lhsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                           _lhsOsigs :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)])
                           _lhsOterminaldefs :: (Set String)
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 389, column 32)
                           _lhsOargnamesw =
                               ({-# LINE 389 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                []
                                {-# LINE 819 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1412, column 40)
                           _lhsOchildTypes =
                               ({-# LINE 1412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                mempty
                                {-# LINE 825 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 909, column 21)
                           _lhsOchildintros =
                               ({-# LINE 909 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.empty
                                {-# LINE 831 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 271, column 34)
                           _lhsOsigs =
                               ({-# LINE 271 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                []
                                {-# LINE 837 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1258, column 42)
                           _lhsOterminaldefs =
                               ({-# LINE 1258 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Set.empty
                                {-# LINE 843 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                       in  ( _lhsOargnamesw,_lhsOchildTypes,_lhsOchildintros,_lhsOsigs,_lhsOterminaldefs))))
-- ENonterminal ------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInitStates        : Map NontermIdent Int
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         inhmap               : Map NontermIdent Attributes
         localAttrTypes       : Map NontermIdent (Map ConstructorIdent (Map Identifier Type))
         mainFile             : String
         mainName             : String
         options              : Options
         synmap               : Map NontermIdent Attributes
         typeSyns             : TypeSyns
         wrappers             : Set NontermIdent
      synthesized attributes:
         childvisit           : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         code                 : PP_Doc
         datas                : PP_Doc
         errors               : Seq Error
         fromToStates         : Map VisitIdentifier (Int,Int)
         initStates           : Map NontermIdent Int
         modules              : PP_Doc
         semFunBndDefs        : Seq PP_Doc
         semFunBndTps         : Seq PP_Doc
         visitKinds           : Map VisitIdentifier VisitKind
         visitdefs            : Map VisitIdentifier (Set Identifier)
         visituses            : Map VisitIdentifier (Set Identifier)
   alternatives:
      alternative ENonterminal:
         child nt             : {NontermIdent}
         child params         : {[Identifier]}
         child classCtxs      : {ClassContext}
         child initial        : {StateIdentifier}
         child initialv       : {Maybe VisitIdentifier}
         child nextVisits     : {Map StateIdentifier StateCtx}
         child prevVisits     : {Map StateIdentifier StateCtx}
         child prods          : EProductions 
         child recursive      : {Bool}
         child hoInfo         : {HigherOrderInfo}
         visit 0:
            local hasWrapper  : _
            local t_params    : _
            local aliasPre    : _
            local aliasMod    : _
            local datatypeNt  : _
            local datatypeCon : _
            local moduleDecl  : _
            local datatypeProds : _
            local fsemname    : _
            local semname     : _
            local frecarg     : _
            local sem_param_tp : _
            local sem_res_tp  : _
            local sem_tp      : _
            local o_sigs      : _
            local sem_nt_body : _
            local sem_nt      : _
            local allstates   : _
            local stvisits    : _
            local t_type      : _
            local t_c_params  : _
            local t_init      : _
            local t_states    : _
            local c_states    : _
            local wr_inh      : _
            local wr_syn      : _
            local genwrap     : _
            local inhAttrs    : _
            local wr_inhs     : _
            local wr_inhs1    : _
            local wr_filter   : _
            local wr_syns     : _
            local wrapname    : _
            local inhname     : _
            local synname     : _
            local firstVisitInfo : _
            local wrapArgSemTp : _
            local wrapArgInhTp : _
            local wrapArgPats : _
            local wrapResTp   : _
            local wrapper     : _
            local wrapperPreamble : _
            local wrapperBody : _
            local semFunBndDef : _
            local semFunBndTp : _
            local semFunBndNm : _
            local ntType      : _
-}
-- cata
sem_ENonterminal :: ENonterminal ->
                    T_ENonterminal
sem_ENonterminal (ENonterminal _nt _params _classCtxs _initial _initialv _nextVisits _prevVisits _prods _recursive _hoInfo) =
    (sem_ENonterminal_ENonterminal _nt _params _classCtxs _initial _initialv _nextVisits _prevVisits (sem_EProductions _prods) _recursive _hoInfo)
-- semantic domain
newtype T_ENonterminal = T_ENonterminal ((Map VisitIdentifier (Int,Int)) ->
                                         (Map NontermIdent Int) ->
                                         (Map VisitIdentifier VisitKind) ->
                                         (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                                         (Map VisitIdentifier (Set Identifier)) ->
                                         (Map VisitIdentifier (Set Identifier)) ->
                                         (Map NontermIdent Attributes) ->
                                         (Map NontermIdent (Map ConstructorIdent (Map Identifier Type))) ->
                                         String ->
                                         String ->
                                         Options ->
                                         (Map NontermIdent Attributes) ->
                                         TypeSyns ->
                                         (Set NontermIdent) ->
                                         ( (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),PP_Doc,PP_Doc,(Seq Error),(Map VisitIdentifier (Int,Int)),(Map NontermIdent Int),PP_Doc,(Seq PP_Doc),(Seq PP_Doc),(Map VisitIdentifier VisitKind),(Map VisitIdentifier (Set Identifier)),(Map VisitIdentifier (Set Identifier))))
data Inh_ENonterminal = Inh_ENonterminal {allFromToStates_Inh_ENonterminal :: (Map VisitIdentifier (Int,Int)),allInitStates_Inh_ENonterminal :: (Map NontermIdent Int),allVisitKinds_Inh_ENonterminal :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_ENonterminal :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),avisitdefs_Inh_ENonterminal :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_ENonterminal :: (Map VisitIdentifier (Set Identifier)),inhmap_Inh_ENonterminal :: (Map NontermIdent Attributes),localAttrTypes_Inh_ENonterminal :: (Map NontermIdent (Map ConstructorIdent (Map Identifier Type))),mainFile_Inh_ENonterminal :: String,mainName_Inh_ENonterminal :: String,options_Inh_ENonterminal :: Options,synmap_Inh_ENonterminal :: (Map NontermIdent Attributes),typeSyns_Inh_ENonterminal :: TypeSyns,wrappers_Inh_ENonterminal :: (Set NontermIdent)}
data Syn_ENonterminal = Syn_ENonterminal {childvisit_Syn_ENonterminal :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),code_Syn_ENonterminal :: PP_Doc,datas_Syn_ENonterminal :: PP_Doc,errors_Syn_ENonterminal :: (Seq Error),fromToStates_Syn_ENonterminal :: (Map VisitIdentifier (Int,Int)),initStates_Syn_ENonterminal :: (Map NontermIdent Int),modules_Syn_ENonterminal :: PP_Doc,semFunBndDefs_Syn_ENonterminal :: (Seq PP_Doc),semFunBndTps_Syn_ENonterminal :: (Seq PP_Doc),visitKinds_Syn_ENonterminal :: (Map VisitIdentifier VisitKind),visitdefs_Syn_ENonterminal :: (Map VisitIdentifier (Set Identifier)),visituses_Syn_ENonterminal :: (Map VisitIdentifier (Set Identifier))}
wrap_ENonterminal :: T_ENonterminal ->
                     Inh_ENonterminal ->
                     Syn_ENonterminal
wrap_ENonterminal (T_ENonterminal sem) (Inh_ENonterminal _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers) =
    (let ( _lhsOchildvisit,_lhsOcode,_lhsOdatas,_lhsOerrors,_lhsOfromToStates,_lhsOinitStates,_lhsOmodules,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers
     in  (Syn_ENonterminal _lhsOchildvisit _lhsOcode _lhsOdatas _lhsOerrors _lhsOfromToStates _lhsOinitStates _lhsOmodules _lhsOsemFunBndDefs _lhsOsemFunBndTps _lhsOvisitKinds _lhsOvisitdefs _lhsOvisituses))
sem_ENonterminal_ENonterminal :: NontermIdent ->
                                 ([Identifier]) ->
                                 ClassContext ->
                                 StateIdentifier ->
                                 (Maybe VisitIdentifier) ->
                                 (Map StateIdentifier StateCtx) ->
                                 (Map StateIdentifier StateCtx) ->
                                 T_EProductions ->
                                 Bool ->
                                 HigherOrderInfo ->
                                 T_ENonterminal
sem_ENonterminal_ENonterminal nt_ params_ classCtxs_ initial_ initialv_ nextVisits_ prevVisits_ (T_EProductions prods_) recursive_ hoInfo_ =
    (T_ENonterminal (\ _lhsIallFromToStates
                       _lhsIallInitStates
                       _lhsIallVisitKinds
                       _lhsIallchildvisit
                       _lhsIavisitdefs
                       _lhsIavisituses
                       _lhsIinhmap
                       _lhsIlocalAttrTypes
                       _lhsImainFile
                       _lhsImainName
                       _lhsIoptions
                       _lhsIsynmap
                       _lhsItypeSyns
                       _lhsIwrappers ->
                         (let _prodsOrename :: Bool
                              _prodsOnt :: NontermIdent
                              _prodsOparams :: ([Identifier])
                              _lhsOdatas :: PP_Doc
                              _lhsOcode :: PP_Doc
                              _lhsOmodules :: PP_Doc
                              _prodsOinhmap :: Attributes
                              _prodsOsynmap :: Attributes
                              _prodsOallInhmap :: (Map NontermIdent Attributes)
                              _prodsOallSynmap :: (Map NontermIdent Attributes)
                              _lhsOsemFunBndDefs :: (Seq PP_Doc)
                              _lhsOsemFunBndTps :: (Seq PP_Doc)
                              _prodsOinitial :: StateIdentifier
                              _prodsOallstates :: ([StateIdentifier])
                              _prodsOnextVisits :: (Map StateIdentifier StateCtx)
                              _prodsOprevVisits :: (Map StateIdentifier StateCtx)
                              _prodsOlocalAttrTypes :: (Map ConstructorIdent (Map Identifier Type))
                              _lhsOinitStates :: (Map NontermIdent Int)
                              _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _lhsOerrors :: (Seq Error)
                              _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                              _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                              _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                              _prodsOallFromToStates :: (Map VisitIdentifier (Int,Int))
                              _prodsOallInitStates :: (Map NontermIdent Int)
                              _prodsOallVisitKinds :: (Map VisitIdentifier VisitKind)
                              _prodsOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _prodsOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _prodsOavisituses :: (Map VisitIdentifier (Set Identifier))
                              _prodsOmainFile :: String
                              _prodsOmainName :: String
                              _prodsOntType :: Type
                              _prodsOoptions :: Options
                              _prodsIallvisits :: ([VisitStateState])
                              _prodsIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _prodsIcount :: Int
                              _prodsIdatatype :: ([PP_Doc])
                              _prodsIdatatype_call :: ([PP_Doc])
                              _prodsIdatatype_con :: ([PP_Doc])
                              _prodsIerrors :: (Seq Error)
                              _prodsIfromToStates :: (Map VisitIdentifier (Int,Int))
                              _prodsIsemFunBndDefs :: (Seq PP_Doc)
                              _prodsIsemFunBndTps :: (Seq PP_Doc)
                              _prodsIsem_nt :: PP_Doc
                              _prodsIsem_prod :: PP_Doc
                              _prodsIt_visits :: PP_Doc
                              _prodsIvisitKinds :: (Map VisitIdentifier VisitKind)
                              _prodsIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _prodsIvisituses :: (Map VisitIdentifier (Set Identifier))
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 76, column 3)
                              _prodsOrename =
                                  ({-# LINE 76 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   rename _lhsIoptions
                                   {-# LINE 1047 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 84, column 3)
                              _prodsOnt =
                                  ({-# LINE 84 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   nt_
                                   {-# LINE 1053 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 94, column 3)
                              _prodsOparams =
                                  ({-# LINE 94 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   params_
                                   {-# LINE 1059 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 113, column 3)
                              _lhsOdatas =
                                  ({-# LINE 113 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   (    text ""
                                    >-< "(* *** " ++ getName nt_ ++ " *** [data] *)")
                                    >-< (if dataTypes _lhsIoptions
                                         then pp "(* data *)"
                                              >-< _datatypeNt
                                              >-< _datatypeProds
                                              >-< ""
                                         else empty)
                                    >-< (if _hasWrapper
                                          then pp "(* wrapper *)"
                                               >-< _wr_inh
                                               >-< _wr_syn
                                               >-< ""
                                          else empty)
                                    >-< (if semfuns _lhsIoptions
                                         then pp "(* semantic domain *)"
                                              >-< _t_init
                                              >-< _t_states
                                              >-< _c_states
                                              >-< _prodsIt_visits
                                              >-< ""
                                         else empty)
                                   {-# LINE 1086 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 136, column 3)
                              _lhsOcode =
                                  ({-# LINE 136 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   (    text ""
                                    >-< "(* *** " ++ getName nt_ ++ " *** [code] *)")
                                    >-< (if dataTypes _lhsIoptions
                                        then pp "(* constructor functions *)"
                                             >-< _datatypeCon
                                        else empty)
                                    >-< (if _hasWrapper
                                         then pp "(* wrapper *)"
                                              >-< _wrapper
                                              >-< ""
                                         else empty)
                                    >-< (if folds _lhsIoptions
                                         then "(* cata *)"
                                              >-< _sem_nt
                                              >-< ""
                                         else empty)
                                    >-< (if semfuns _lhsIoptions
                                         then "(* semantic domain *)"
                                              >-< _prodsIsem_prod
                                              >-< ""
                                         else empty)
                                   {-# LINE 1112 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 161, column 3)
                              _lhsOmodules =
                                  ({-# LINE 161 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _moduleDecl
                                   {-# LINE 1118 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 163, column 3)
                              _hasWrapper =
                                  ({-# LINE 163 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   nt_ `Set.member` _lhsIwrappers
                                   {-# LINE 1124 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 214, column 3)
                              _t_params =
                                  ({-# LINE 214 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   ppTypeParams params_
                                   {-# LINE 1130 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 215, column 3)
                              _aliasPre =
                                  ({-# LINE 215 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   "and" >#< _t_params     >#< nt_ >#< "="
                                   {-# LINE 1136 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 216, column 3)
                              _aliasMod =
                                  ({-# LINE 216 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _aliasPre     >#< modName nt_ >|< ".t"
                                   {-# LINE 1142 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 217, column 3)
                              _datatypeNt =
                                  ({-# LINE 217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   case lookup nt_ _lhsItypeSyns of
                                     Just (List t)     -> _aliasPre     >#< ppTp t >#< "list"
                                     Just (Maybe t)    -> _aliasPre     >#< ppTp t >#< "option"
                                     Just (Tuple ts)   -> _aliasPre     >#< (pp_block "(" ")" " * " $ map (ppTp . snd) ts)
                                     Just (Map k v)    -> _aliasMod
                                     Just (IntMap t)   -> _aliasMod
                                     Just (OrdSet t)   -> _aliasMod
                                     Just IntSet       -> _aliasMod
                                     _ -> "and" >#< _t_params     >#< nt_ >#< "="
                                          >-< ( if null _prodsIdatatype
                                                then pp "unit"
                                                else indent 2 $ vlist _prodsIdatatype_call
                                              )
                                   {-# LINE 1160 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 236, column 3)
                              _datatypeCon =
                                  ({-# LINE 236 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   case lookup nt_ _lhsItypeSyns of
                                     Just _  -> empty
                                     Nothing -> vlist _prodsIdatatype_con
                                   {-# LINE 1168 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 241, column 3)
                              _moduleDecl =
                                  ({-# LINE 241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   let ppModule expr = "module" >#< modName nt_ >#< "="
                                   in case lookup nt_ _lhsItypeSyns of
                                        Just (Map k _)  -> ppModule ("Map.Make" >#< pp_parens (ppTp k))
                                        Just (IntMap _) -> ppModule ("Map.Make ()")
                                        Just (OrdSet t) -> ppModule ("Set.Make" >#< pp_parens (ppTp t))
                                        Just IntSet     -> ppModule ("Set.Make (struct  type t = int  let compare = Pervasives.compare  end)")
                                        _               -> empty
                                   {-# LINE 1180 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 250, column 3)
                              _datatypeProds =
                                  ({-# LINE 250 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   vlist _prodsIdatatype
                                   {-# LINE 1186 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 310, column 3)
                              _fsemname =
                                  ({-# LINE 310 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   \x -> prefix _lhsIoptions ++ show x
                                   {-# LINE 1192 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 311, column 3)
                              _semname =
                                  ({-# LINE 311 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _fsemname     nt_
                                   {-# LINE 1198 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 312, column 3)
                              _frecarg =
                                  ({-# LINE 312 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   \t x -> case t of
                                     NT nt _ _ -> pp_parens (_fsemname nt >#< x)
                                     _         -> x
                                   {-# LINE 1206 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 316, column 3)
                              _sem_param_tp =
                                  ({-# LINE 316 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _t_params     >#< nt_
                                   {-# LINE 1212 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 317, column 3)
                              _sem_res_tp =
                                  ({-# LINE 317 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _t_params     >#< _t_type
                                   {-# LINE 1218 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 318, column 3)
                              _sem_tp =
                                  ({-# LINE 318 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _sem_param_tp     >#< "->" >#< _sem_res_tp
                                   {-# LINE 1224 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 320, column 3)
                              _o_sigs =
                                  ({-# LINE 320 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   typeSigs _lhsIoptions
                                   {-# LINE 1230 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 321, column 3)
                              _sem_nt_body =
                                  ({-# LINE 321 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   "match arg with" >-< (indent 2 $ _prodsIsem_nt)
                                   {-# LINE 1236 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 322, column 3)
                              _sem_nt =
                                  ({-# LINE 322 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   let genSem nm body = "and" >#< ppFunDecl _o_sigs     (pp _semname    ) [(pp nm, _sem_param_tp    )] _sem_res_tp     body
                                       genAlias alts = genSem (pp "arg") (pp "match arg with" >-< (indent 2 $ vlist $ map (pp "|" >#<) alts))
                                       genMap v = let body = modName nt_ >|< ".fold" >#< _semname     >|< "_Entry" >#< _semname     >|< "_Nil" >#< els
                                                      els  = case v of
                                                        NT nt _ _ -> pp_parens (modName nt_ >|< ".map" >#< _fsemname     nt >#< "m")
                                                        _         -> pp "m"
                                                  in genSem "m" body
                                       genSet mbNt = let body = "List.fold_right" >#< _semname     >|< "_Entry" >#<
                                                                 els (pp_parens (modName nt_ >|< ".elements" >#< "s")) >#< _semname     >|< "_Nil"
                                                         els r = maybe r (\nt -> pp_parens ("List.map" >#< _fsemname     nt >#< r)) mbNt
                                                     in genSem "s" body
                                   in case lookup nt_ _lhsItypeSyns of
                                        Just (List t) -> let body = "List.fold_right" >#< _semname     >|< "_Cons" >#< els >#< _semname     >|< "_Nil"
                                                             els  = case t of
                                                               NT nt _ _ -> pp_parens ("List.map" >#< _fsemname     nt >#< "list")
                                                               _         -> pp "list"
                                                         in genSem "list" body
                                        Just (Tuple ts) -> let pat = pp_parens (ppCommas $ map fst ts)
                                                               body = _semname     >|< "_Tuple" >#< ppSpaced (map (\t -> _frecarg     (snd t) (pp $ fst t)) ts)
                                                           in genSem pat body
                                        Just (Map _ v) -> genMap v
                                        Just (IntMap v) -> genMap v
                                        Just (Maybe t) -> genAlias
                                            [ "None" >#< "->" >#< "=" >#< _semname     >|< "_Nothing"
                                            , "Some" >#< "just" >#< "->" >#< _semname     >|< "_Just" >#< _frecarg t (pp "just")
                                            ]
                                        Just (OrdSet t) -> genSet $ case t of
                                                             NT nt _ _ -> Just nt
                                                             _         -> Nothing
                                        Just (IntSet) -> genSet Nothing
                                        _ -> genSem "arg" _sem_nt_body
                                   {-# LINE 1272 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 416, column 19)
                              (Just _prodsOinhmap) =
                                  ({-# LINE 416 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.lookup nt_ _lhsIinhmap
                                   {-# LINE 1278 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 417, column 19)
                              (Just _prodsOsynmap) =
                                  ({-# LINE 417 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.lookup nt_ _lhsIsynmap
                                   {-# LINE 1284 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 418, column 18)
                              _prodsOallInhmap =
                                  ({-# LINE 418 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIinhmap
                                   {-# LINE 1290 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 419, column 18)
                              _prodsOallSynmap =
                                  ({-# LINE 419 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIsynmap
                                   {-# LINE 1296 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 440, column 3)
                              _allstates =
                                  ({-# LINE 440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   orderStates initial_ _prodsIallvisits
                                   {-# LINE 1302 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 441, column 3)
                              _stvisits =
                                  ({-# LINE 441 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   \st -> filter (\(v,f,t) -> f == st) _prodsIallvisits
                                   {-# LINE 1308 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 442, column 3)
                              _t_type =
                                  ({-# LINE 442 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   type_nt_sem_top nt_
                                   {-# LINE 1314 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 443, column 3)
                              _t_c_params =
                                  ({-# LINE 443 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   ppTypeParams (cont_tvar : map pp params_)
                                   {-# LINE 1320 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 446, column 3)
                              _t_init =
                                  ({-# LINE 446 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   "and" >#< _t_params     >#< _t_type     >#< "=" >#< pp_braces ( nm_attach nt_ >#< ":" >#< "unit" >#< "->" >#< _t_params     >#< type_nt_sem nt_ initial_)
                                   {-# LINE 1326 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 449, column 3)
                              _t_states =
                                  ({-# LINE 449 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   vlist $ map (\st ->
                                     let s_st = type_nt_state nt_ st
                                         t_st  = type_nt_sem nt_ st
                                         c_st  = type_caller nt_ st
                                         nextVisits = Map.findWithDefault ManyVis st nextVisits_
                                         decl = "and" >#< _t_params     >#< t_st >#< "="
                                     in case nextVisits of
                                          NoneVis    -> decl >#< "unit"
                                          _          -> decl >#< ppRecordVal [ nm_invoke nt_ st >#< ":" >#< cont_tvar >#< "." >#< _t_c_params     >#< c_st >#< "->" >#< cont_tvar ]
                                    ) _allstates
                                   {-# LINE 1341 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 502, column 3)
                              _c_states =
                                  ({-# LINE 502 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   vlist $ map (\st ->
                                     let nt_st = type_nt_state nt_ st
                                         c_st  = type_caller nt_ st
                                         outg  = filter (\(_,f,_) -> f == st) _prodsIallvisits
                                         nextVisits = Map.findWithDefault ManyVis st nextVisits_
                                         declHead = "and" >#< _t_c_params     >#< c_st >#< "="
                                         visitcons = vlist $ map (\(v,_,_) ->
                                           "|" >#< con_visit nt_ v >#< "of" >#< _t_c_params     >#< type_caller_visit nt_ v
                                          ) outg
                                     in case nextVisits of
                                          NoneVis  -> empty
                                          OneVis v -> declHead >#< _t_c_params     >#< type_caller_visit nt_ v
                                          ManyVis  -> declHead >-< indent 3 visitcons
                                    ) _allstates
                                   {-# LINE 1360 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 584, column 3)
                              _wr_inh =
                                  ({-# LINE 584 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _genwrap     "inh" _wr_inhs1
                                   {-# LINE 1366 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 585, column 3)
                              _wr_syn =
                                  ({-# LINE 585 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _genwrap     "syn" _wr_syns
                                   {-# LINE 1372 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 586, column 3)
                              _genwrap =
                                  ({-# LINE 586 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   \nm attrs ->
                                     "and" >#< _t_params     >#< nm >|< "_" >|< nt_ >#< "=" >#< ppRecordTp
                                       [ i >|< "_" >|< nm >|< "_" >|< nt_ >#< ":" >#< ppTp t | (i,t) <- attrs ]
                                   {-# LINE 1380 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 590, column 3)
                              _inhAttrs =
                                  ({-# LINE 590 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   fromJust $ Map.lookup nt_ _lhsIinhmap
                                   {-# LINE 1386 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 591, column 3)
                              _wr_inhs =
                                  ({-# LINE 591 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.toList $ _wr_filter     $ _inhAttrs
                                   {-# LINE 1392 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 592, column 3)
                              _wr_inhs1 =
                                  ({-# LINE 592 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.toList _inhAttrs
                                   {-# LINE 1398 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 593, column 3)
                              _wr_filter =
                                  ({-# LINE 593 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   if kennedyWarren _lhsIoptions && lateHigherOrderBinding _lhsIoptions
                                   then Map.delete idLateBindingAttr
                                   else id
                                   {-# LINE 1406 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 596, column 3)
                              _wr_syns =
                                  ({-# LINE 596 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.toList $ fromJust $ Map.lookup nt_ _lhsIsynmap
                                   {-# LINE 1412 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 598, column 3)
                              _wrapname =
                                  ({-# LINE 598 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   text ("wrap_" ++ show nt_)
                                   {-# LINE 1418 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 599, column 3)
                              _inhname =
                                  ({-# LINE 599 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   text ("inh_" ++ show nt_)
                                   {-# LINE 1424 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 600, column 3)
                              _synname =
                                  ({-# LINE 600 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   text ("syn_" ++ show nt_)
                                   {-# LINE 1430 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 601, column 3)
                              _firstVisitInfo =
                                  ({-# LINE 601 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.findWithDefault ManyVis initial_ nextVisits_
                                   {-# LINE 1436 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 603, column 3)
                              _wrapArgSemTp =
                                  ({-# LINE 603 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _t_params     >#< _t_type
                                   {-# LINE 1442 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 604, column 3)
                              _wrapArgInhTp =
                                  ({-# LINE 604 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _t_params     >#< _inhname
                                   {-# LINE 1448 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 605, column 3)
                              _wrapArgPats =
                                  ({-# LINE 605 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   ppRecordVal [ i >|< "_inh_" >|< nt_ >#< "=" >#< lhsname True i | (i,_) <- _wr_inhs1     ]
                                   {-# LINE 1454 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 606, column 3)
                              _wrapResTp =
                                  ({-# LINE 606 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _t_params     >#< _synname
                                   {-# LINE 1460 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 607, column 3)
                              _wrapper =
                                  ({-# LINE 607 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   "and" >#< ppFunDecl _o_sigs     _wrapname     [(pp "act", _wrapArgSemTp    ), (_wrapArgPats    , _wrapArgInhTp    )] _wrapResTp     _wrapperPreamble
                                   {-# LINE 1466 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 608, column 3)
                              _wrapperPreamble =
                                  ({-# LINE 608 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   ( if lateHigherOrderBinding _lhsIoptions
                                     then "let" >#< lhsname True idLateBindingAttr >#< "=" >#< lateBindingFieldNm _lhsImainName >#< "in"
                                     else empty
                                   )
                                   >-< _wrapperBody
                                   {-# LINE 1476 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 614, column 3)
                              _wrapperBody =
                                  ({-# LINE 614 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   case initialv_ of
                                     Nothing -> text "{ }"
                                     Just initv ->
                                       let attach  = "let" >#< "sem" >#< "=" >#< "act." >|< nm_attach nt_ >#< "()" >#< "in"
                                           pat     = ppRecordVal [ nm_outarg i nt_ initv >#< "=" >#< lhsname False i | (i,_) <- _wr_syns     ]
                                           bld     = ppRecordVal [ i >|< "_syn_" >|< nt_ >#< "=" >#< lhsname False i | (i,_) <- _wr_syns     ]
                                           res     = "let res = function" >#< pat >#< "->" >#< bld >#< "in"
                                           inps    = "let" >#< "inps" >#< "=" >#< ppRecordVal [ nm_inarg i nt_ initv >#< "=" >#< lhsname True i | (i,_) <- _wr_inhs     ] >#< "in"
                                           arg     = "let" >#< "arg" >#< "=" >#< argcon >#< argrec >#< "in"
                                           argcon  = case _firstVisitInfo     of
                                                       ManyVis -> con_visit nt_ initv
                                                       _       -> empty
                                           argrec  = ppRecordVal
                                                       [ nm_inh nt_ initv >#< "=" >#<  "inps"
                                                       , nm_cont nt_ initv >#< "=" >#< "res"
                                                       ]
                                           invoke  = "sem." >|< nm_invoke nt_ initial_ >#< "arg"
                                       in attach >-< res >-< inps >-< arg >-< invoke
                                   {-# LINE 1499 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 644, column 3)
                              _lhsOsemFunBndDefs =
                                  ({-# LINE 644 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _semFunBndDef     Seq.<| _prodsIsemFunBndDefs
                                   {-# LINE 1505 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 645, column 3)
                              _lhsOsemFunBndTps =
                                  ({-# LINE 645 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _semFunBndTp     Seq.<| _prodsIsemFunBndTps
                                   {-# LINE 1511 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 646, column 3)
                              _semFunBndDef =
                                  ({-# LINE 646 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _semFunBndNm     >#< "=" >#< _semname
                                   {-# LINE 1517 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 647, column 3)
                              _semFunBndTp =
                                  ({-# LINE 647 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _semFunBndNm     >#< ":" >#< _sem_tp
                                   {-# LINE 1523 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 648, column 3)
                              _semFunBndNm =
                                  ({-# LINE 648 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   lateSemNtLabel nt_
                                   {-# LINE 1529 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 678, column 3)
                              _prodsOinitial =
                                  ({-# LINE 678 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   initial_
                                   {-# LINE 1535 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 679, column 3)
                              _prodsOallstates =
                                  ({-# LINE 679 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _allstates
                                   {-# LINE 1541 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 1385, column 3)
                              _prodsOnextVisits =
                                  ({-# LINE 1385 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   nextVisits_
                                   {-# LINE 1547 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 1386, column 3)
                              _prodsOprevVisits =
                                  ({-# LINE 1386 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   prevVisits_
                                   {-# LINE 1553 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 1430, column 3)
                              _prodsOlocalAttrTypes =
                                  ({-# LINE 1430 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.findWithDefault Map.empty nt_ _lhsIlocalAttrTypes
                                   {-# LINE 1559 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 1457, column 3)
                              _lhsOinitStates =
                                  ({-# LINE 1457 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.singleton nt_ initial_
                                   {-# LINE 1565 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 1471, column 3)
                              _ntType =
                                  ({-# LINE 1471 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   NT nt_ (map show params_) False
                                   {-# LINE 1571 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                              _lhsOchildvisit =
                                  ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _prodsIchildvisit
                                   {-# LINE 1577 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                              _lhsOerrors =
                                  ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _prodsIerrors
                                   {-# LINE 1583 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                              _lhsOfromToStates =
                                  ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _prodsIfromToStates
                                   {-# LINE 1589 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                              _lhsOvisitKinds =
                                  ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _prodsIvisitKinds
                                   {-# LINE 1595 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                              _lhsOvisitdefs =
                                  ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _prodsIvisitdefs
                                   {-# LINE 1601 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                              _lhsOvisituses =
                                  ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _prodsIvisituses
                                   {-# LINE 1607 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOallFromToStates =
                                  ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallFromToStates
                                   {-# LINE 1613 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOallInitStates =
                                  ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallInitStates
                                   {-# LINE 1619 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOallVisitKinds =
                                  ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallVisitKinds
                                   {-# LINE 1625 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOallchildvisit =
                                  ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallchildvisit
                                   {-# LINE 1631 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOavisitdefs =
                                  ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIavisitdefs
                                   {-# LINE 1637 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOavisituses =
                                  ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIavisituses
                                   {-# LINE 1643 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOmainFile =
                                  ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsImainFile
                                   {-# LINE 1649 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOmainName =
                                  ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsImainName
                                   {-# LINE 1655 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (from local)
                              _prodsOntType =
                                  ({-# LINE 1469 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _ntType
                                   {-# LINE 1661 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _prodsOoptions =
                                  ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 1667 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              ( _prodsIallvisits,_prodsIchildvisit,_prodsIcount,_prodsIdatatype,_prodsIdatatype_call,_prodsIdatatype_con,_prodsIerrors,_prodsIfromToStates,_prodsIsemFunBndDefs,_prodsIsemFunBndTps,_prodsIsem_nt,_prodsIsem_prod,_prodsIt_visits,_prodsIvisitKinds,_prodsIvisitdefs,_prodsIvisituses) =
                                  prods_ _prodsOallFromToStates _prodsOallInhmap _prodsOallInitStates _prodsOallSynmap _prodsOallVisitKinds _prodsOallchildvisit _prodsOallstates _prodsOavisitdefs _prodsOavisituses _prodsOinhmap _prodsOinitial _prodsOlocalAttrTypes _prodsOmainFile _prodsOmainName _prodsOnextVisits _prodsOnt _prodsOntType _prodsOoptions _prodsOparams _prodsOprevVisits _prodsOrename _prodsOsynmap
                          in  ( _lhsOchildvisit,_lhsOcode,_lhsOdatas,_lhsOerrors,_lhsOfromToStates,_lhsOinitStates,_lhsOmodules,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
-- ENonterminals -----------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInitStates        : Map NontermIdent Int
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         inhmap               : Map NontermIdent Attributes
         localAttrTypes       : Map NontermIdent (Map ConstructorIdent (Map Identifier Type))
         mainFile             : String
         mainName             : String
         options              : Options
         synmap               : Map NontermIdent Attributes
         typeSyns             : TypeSyns
         wrappers             : Set NontermIdent
      synthesized attributes:
         childvisit           : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         code                 : PP_Doc
         datas                : PP_Doc
         errors               : Seq Error
         fromToStates         : Map VisitIdentifier (Int,Int)
         initStates           : Map NontermIdent Int
         modules              : PP_Doc
         semFunBndDefs        : Seq PP_Doc
         semFunBndTps         : Seq PP_Doc
         visitKinds           : Map VisitIdentifier VisitKind
         visitdefs            : Map VisitIdentifier (Set Identifier)
         visituses            : Map VisitIdentifier (Set Identifier)
   alternatives:
      alternative Cons:
         child hd             : ENonterminal 
         child tl             : ENonterminals 
      alternative Nil:
-}
-- cata
sem_ENonterminals :: ENonterminals ->
                     T_ENonterminals
sem_ENonterminals list =
    (Prelude.foldr sem_ENonterminals_Cons sem_ENonterminals_Nil (Prelude.map sem_ENonterminal list))
-- semantic domain
newtype T_ENonterminals = T_ENonterminals ((Map VisitIdentifier (Int,Int)) ->
                                           (Map NontermIdent Int) ->
                                           (Map VisitIdentifier VisitKind) ->
                                           (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                                           (Map VisitIdentifier (Set Identifier)) ->
                                           (Map VisitIdentifier (Set Identifier)) ->
                                           (Map NontermIdent Attributes) ->
                                           (Map NontermIdent (Map ConstructorIdent (Map Identifier Type))) ->
                                           String ->
                                           String ->
                                           Options ->
                                           (Map NontermIdent Attributes) ->
                                           TypeSyns ->
                                           (Set NontermIdent) ->
                                           ( (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),PP_Doc,PP_Doc,(Seq Error),(Map VisitIdentifier (Int,Int)),(Map NontermIdent Int),PP_Doc,(Seq PP_Doc),(Seq PP_Doc),(Map VisitIdentifier VisitKind),(Map VisitIdentifier (Set Identifier)),(Map VisitIdentifier (Set Identifier))))
data Inh_ENonterminals = Inh_ENonterminals {allFromToStates_Inh_ENonterminals :: (Map VisitIdentifier (Int,Int)),allInitStates_Inh_ENonterminals :: (Map NontermIdent Int),allVisitKinds_Inh_ENonterminals :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_ENonterminals :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),avisitdefs_Inh_ENonterminals :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_ENonterminals :: (Map VisitIdentifier (Set Identifier)),inhmap_Inh_ENonterminals :: (Map NontermIdent Attributes),localAttrTypes_Inh_ENonterminals :: (Map NontermIdent (Map ConstructorIdent (Map Identifier Type))),mainFile_Inh_ENonterminals :: String,mainName_Inh_ENonterminals :: String,options_Inh_ENonterminals :: Options,synmap_Inh_ENonterminals :: (Map NontermIdent Attributes),typeSyns_Inh_ENonterminals :: TypeSyns,wrappers_Inh_ENonterminals :: (Set NontermIdent)}
data Syn_ENonterminals = Syn_ENonterminals {childvisit_Syn_ENonterminals :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),code_Syn_ENonterminals :: PP_Doc,datas_Syn_ENonterminals :: PP_Doc,errors_Syn_ENonterminals :: (Seq Error),fromToStates_Syn_ENonterminals :: (Map VisitIdentifier (Int,Int)),initStates_Syn_ENonterminals :: (Map NontermIdent Int),modules_Syn_ENonterminals :: PP_Doc,semFunBndDefs_Syn_ENonterminals :: (Seq PP_Doc),semFunBndTps_Syn_ENonterminals :: (Seq PP_Doc),visitKinds_Syn_ENonterminals :: (Map VisitIdentifier VisitKind),visitdefs_Syn_ENonterminals :: (Map VisitIdentifier (Set Identifier)),visituses_Syn_ENonterminals :: (Map VisitIdentifier (Set Identifier))}
wrap_ENonterminals :: T_ENonterminals ->
                      Inh_ENonterminals ->
                      Syn_ENonterminals
wrap_ENonterminals (T_ENonterminals sem) (Inh_ENonterminals _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers) =
    (let ( _lhsOchildvisit,_lhsOcode,_lhsOdatas,_lhsOerrors,_lhsOfromToStates,_lhsOinitStates,_lhsOmodules,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsIoptions _lhsIsynmap _lhsItypeSyns _lhsIwrappers
     in  (Syn_ENonterminals _lhsOchildvisit _lhsOcode _lhsOdatas _lhsOerrors _lhsOfromToStates _lhsOinitStates _lhsOmodules _lhsOsemFunBndDefs _lhsOsemFunBndTps _lhsOvisitKinds _lhsOvisitdefs _lhsOvisituses))
sem_ENonterminals_Cons :: T_ENonterminal ->
                          T_ENonterminals ->
                          T_ENonterminals
sem_ENonterminals_Cons (T_ENonterminal hd_) (T_ENonterminals tl_) =
    (T_ENonterminals (\ _lhsIallFromToStates
                        _lhsIallInitStates
                        _lhsIallVisitKinds
                        _lhsIallchildvisit
                        _lhsIavisitdefs
                        _lhsIavisituses
                        _lhsIinhmap
                        _lhsIlocalAttrTypes
                        _lhsImainFile
                        _lhsImainName
                        _lhsIoptions
                        _lhsIsynmap
                        _lhsItypeSyns
                        _lhsIwrappers ->
                          (let _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _lhsOcode :: PP_Doc
                               _lhsOdatas :: PP_Doc
                               _lhsOerrors :: (Seq Error)
                               _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                               _lhsOinitStates :: (Map NontermIdent Int)
                               _lhsOmodules :: PP_Doc
                               _lhsOsemFunBndDefs :: (Seq PP_Doc)
                               _lhsOsemFunBndTps :: (Seq PP_Doc)
                               _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                               _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                               _hdOallFromToStates :: (Map VisitIdentifier (Int,Int))
                               _hdOallInitStates :: (Map NontermIdent Int)
                               _hdOallVisitKinds :: (Map VisitIdentifier VisitKind)
                               _hdOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _hdOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _hdOavisituses :: (Map VisitIdentifier (Set Identifier))
                               _hdOinhmap :: (Map NontermIdent Attributes)
                               _hdOlocalAttrTypes :: (Map NontermIdent (Map ConstructorIdent (Map Identifier Type)))
                               _hdOmainFile :: String
                               _hdOmainName :: String
                               _hdOoptions :: Options
                               _hdOsynmap :: (Map NontermIdent Attributes)
                               _hdOtypeSyns :: TypeSyns
                               _hdOwrappers :: (Set NontermIdent)
                               _tlOallFromToStates :: (Map VisitIdentifier (Int,Int))
                               _tlOallInitStates :: (Map NontermIdent Int)
                               _tlOallVisitKinds :: (Map VisitIdentifier VisitKind)
                               _tlOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _tlOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _tlOavisituses :: (Map VisitIdentifier (Set Identifier))
                               _tlOinhmap :: (Map NontermIdent Attributes)
                               _tlOlocalAttrTypes :: (Map NontermIdent (Map ConstructorIdent (Map Identifier Type)))
                               _tlOmainFile :: String
                               _tlOmainName :: String
                               _tlOoptions :: Options
                               _tlOsynmap :: (Map NontermIdent Attributes)
                               _tlOtypeSyns :: TypeSyns
                               _tlOwrappers :: (Set NontermIdent)
                               _hdIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _hdIcode :: PP_Doc
                               _hdIdatas :: PP_Doc
                               _hdIerrors :: (Seq Error)
                               _hdIfromToStates :: (Map VisitIdentifier (Int,Int))
                               _hdIinitStates :: (Map NontermIdent Int)
                               _hdImodules :: PP_Doc
                               _hdIsemFunBndDefs :: (Seq PP_Doc)
                               _hdIsemFunBndTps :: (Seq PP_Doc)
                               _hdIvisitKinds :: (Map VisitIdentifier VisitKind)
                               _hdIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _hdIvisituses :: (Map VisitIdentifier (Set Identifier))
                               _tlIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _tlIcode :: PP_Doc
                               _tlIdatas :: PP_Doc
                               _tlIerrors :: (Seq Error)
                               _tlIfromToStates :: (Map VisitIdentifier (Int,Int))
                               _tlIinitStates :: (Map NontermIdent Int)
                               _tlImodules :: PP_Doc
                               _tlIsemFunBndDefs :: (Seq PP_Doc)
                               _tlIsemFunBndTps :: (Seq PP_Doc)
                               _tlIvisitKinds :: (Map VisitIdentifier VisitKind)
                               _tlIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _tlIvisituses :: (Map VisitIdentifier (Set Identifier))
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                               _lhsOchildvisit =
                                   ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIchildvisit `Map.union` _tlIchildvisit
                                    {-# LINE 1824 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 107, column 58)
                               _lhsOcode =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIcode >-< _tlIcode
                                    {-# LINE 1830 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 107, column 58)
                               _lhsOdatas =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIdatas >-< _tlIdatas
                                    {-# LINE 1836 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                               _lhsOerrors =
                                   ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIerrors Seq.>< _tlIerrors
                                    {-# LINE 1842 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                               _lhsOfromToStates =
                                   ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIfromToStates `mappend` _tlIfromToStates
                                    {-# LINE 1848 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1452, column 50)
                               _lhsOinitStates =
                                   ({-# LINE 1452 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIinitStates `mappend` _tlIinitStates
                                    {-# LINE 1854 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 107, column 58)
                               _lhsOmodules =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdImodules >-< _tlImodules
                                    {-# LINE 1860 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                               _lhsOsemFunBndDefs =
                                   ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIsemFunBndDefs Seq.>< _tlIsemFunBndDefs
                                    {-# LINE 1866 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                               _lhsOsemFunBndTps =
                                   ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIsemFunBndTps Seq.>< _tlIsemFunBndTps
                                    {-# LINE 1872 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                               _lhsOvisitKinds =
                                   ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIvisitKinds `mappend` _tlIvisitKinds
                                    {-# LINE 1878 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                               _lhsOvisitdefs =
                                   ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIvisitdefs `uwSetUnion` _tlIvisitdefs
                                    {-# LINE 1884 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                               _lhsOvisituses =
                                   ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _hdIvisituses `uwSetUnion` _tlIvisituses
                                    {-# LINE 1890 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOallFromToStates =
                                   ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallFromToStates
                                    {-# LINE 1896 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOallInitStates =
                                   ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallInitStates
                                    {-# LINE 1902 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOallVisitKinds =
                                   ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallVisitKinds
                                    {-# LINE 1908 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOallchildvisit =
                                   ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallchildvisit
                                    {-# LINE 1914 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOavisitdefs =
                                   ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIavisitdefs
                                    {-# LINE 1920 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOavisituses =
                                   ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIavisituses
                                    {-# LINE 1926 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOinhmap =
                                   ({-# LINE 403 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIinhmap
                                    {-# LINE 1932 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOlocalAttrTypes =
                                   ({-# LINE 1425 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIlocalAttrTypes
                                    {-# LINE 1938 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOmainFile =
                                   ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsImainFile
                                    {-# LINE 1944 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOmainName =
                                   ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsImainName
                                    {-# LINE 1950 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOoptions =
                                   ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIoptions
                                    {-# LINE 1956 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOsynmap =
                                   ({-# LINE 404 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIsynmap
                                    {-# LINE 1962 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOtypeSyns =
                                   ({-# LINE 168 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsItypeSyns
                                    {-# LINE 1968 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _hdOwrappers =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIwrappers
                                    {-# LINE 1974 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOallFromToStates =
                                   ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallFromToStates
                                    {-# LINE 1980 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOallInitStates =
                                   ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallInitStates
                                    {-# LINE 1986 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOallVisitKinds =
                                   ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallVisitKinds
                                    {-# LINE 1992 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOallchildvisit =
                                   ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIallchildvisit
                                    {-# LINE 1998 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOavisitdefs =
                                   ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIavisitdefs
                                    {-# LINE 2004 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOavisituses =
                                   ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIavisituses
                                    {-# LINE 2010 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOinhmap =
                                   ({-# LINE 403 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIinhmap
                                    {-# LINE 2016 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOlocalAttrTypes =
                                   ({-# LINE 1425 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIlocalAttrTypes
                                    {-# LINE 2022 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOmainFile =
                                   ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsImainFile
                                    {-# LINE 2028 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOmainName =
                                   ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsImainName
                                    {-# LINE 2034 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOoptions =
                                   ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIoptions
                                    {-# LINE 2040 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOsynmap =
                                   ({-# LINE 404 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIsynmap
                                    {-# LINE 2046 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOtypeSyns =
                                   ({-# LINE 168 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsItypeSyns
                                    {-# LINE 2052 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _tlOwrappers =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIwrappers
                                    {-# LINE 2058 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               ( _hdIchildvisit,_hdIcode,_hdIdatas,_hdIerrors,_hdIfromToStates,_hdIinitStates,_hdImodules,_hdIsemFunBndDefs,_hdIsemFunBndTps,_hdIvisitKinds,_hdIvisitdefs,_hdIvisituses) =
                                   hd_ _hdOallFromToStates _hdOallInitStates _hdOallVisitKinds _hdOallchildvisit _hdOavisitdefs _hdOavisituses _hdOinhmap _hdOlocalAttrTypes _hdOmainFile _hdOmainName _hdOoptions _hdOsynmap _hdOtypeSyns _hdOwrappers
                               ( _tlIchildvisit,_tlIcode,_tlIdatas,_tlIerrors,_tlIfromToStates,_tlIinitStates,_tlImodules,_tlIsemFunBndDefs,_tlIsemFunBndTps,_tlIvisitKinds,_tlIvisitdefs,_tlIvisituses) =
                                   tl_ _tlOallFromToStates _tlOallInitStates _tlOallVisitKinds _tlOallchildvisit _tlOavisitdefs _tlOavisituses _tlOinhmap _tlOlocalAttrTypes _tlOmainFile _tlOmainName _tlOoptions _tlOsynmap _tlOtypeSyns _tlOwrappers
                           in  ( _lhsOchildvisit,_lhsOcode,_lhsOdatas,_lhsOerrors,_lhsOfromToStates,_lhsOinitStates,_lhsOmodules,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
sem_ENonterminals_Nil :: T_ENonterminals
sem_ENonterminals_Nil =
    (T_ENonterminals (\ _lhsIallFromToStates
                        _lhsIallInitStates
                        _lhsIallVisitKinds
                        _lhsIallchildvisit
                        _lhsIavisitdefs
                        _lhsIavisituses
                        _lhsIinhmap
                        _lhsIlocalAttrTypes
                        _lhsImainFile
                        _lhsImainName
                        _lhsIoptions
                        _lhsIsynmap
                        _lhsItypeSyns
                        _lhsIwrappers ->
                          (let _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _lhsOcode :: PP_Doc
                               _lhsOdatas :: PP_Doc
                               _lhsOerrors :: (Seq Error)
                               _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                               _lhsOinitStates :: (Map NontermIdent Int)
                               _lhsOmodules :: PP_Doc
                               _lhsOsemFunBndDefs :: (Seq PP_Doc)
                               _lhsOsemFunBndTps :: (Seq PP_Doc)
                               _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                               _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                               _lhsOchildvisit =
                                   ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    Map.empty
                                    {-# LINE 2097 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 107, column 58)
                               _lhsOcode =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    empty
                                    {-# LINE 2103 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 107, column 58)
                               _lhsOdatas =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    empty
                                    {-# LINE 2109 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                               _lhsOerrors =
                                   ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    Seq.empty
                                    {-# LINE 2115 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                               _lhsOfromToStates =
                                   ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    mempty
                                    {-# LINE 2121 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1452, column 50)
                               _lhsOinitStates =
                                   ({-# LINE 1452 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    mempty
                                    {-# LINE 2127 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 107, column 58)
                               _lhsOmodules =
                                   ({-# LINE 107 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    empty
                                    {-# LINE 2133 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                               _lhsOsemFunBndDefs =
                                   ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    Seq.empty
                                    {-# LINE 2139 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                               _lhsOsemFunBndTps =
                                   ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    Seq.empty
                                    {-# LINE 2145 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                               _lhsOvisitKinds =
                                   ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    mempty
                                    {-# LINE 2151 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                               _lhsOvisitdefs =
                                   ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    Map.empty
                                    {-# LINE 2157 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                               _lhsOvisituses =
                                   ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    Map.empty
                                    {-# LINE 2163 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                           in  ( _lhsOchildvisit,_lhsOcode,_lhsOdatas,_lhsOerrors,_lhsOfromToStates,_lhsOinitStates,_lhsOmodules,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
-- EProduction -------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInhmap            : Map NontermIdent Attributes
         allInitStates        : Map NontermIdent Int
         allSynmap            : Map NontermIdent Attributes
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         allstates            : [StateIdentifier]
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         inhmap               : Attributes
         initial              : StateIdentifier
         localAttrTypes       : Map ConstructorIdent (Map Identifier Type)
         mainFile             : String
         mainName             : String
         nextVisits           : Map StateIdentifier StateCtx
         nt                   : NontermIdent
         ntType               : Type
         options              : Options
         params               : [Identifier]
         prevVisits           : Map StateIdentifier StateCtx
         rename               : Bool
         synmap               : Attributes
      synthesized attributes:
         allvisits            : [VisitStateState]
         childvisit           : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         count                : Int
         datatype             : PP_Doc
         datatype_call        : PP_Doc
         datatype_con         : PP_Doc
         errors               : Seq Error
         fromToStates         : Map VisitIdentifier (Int,Int)
         semFunBndDefs        : Seq PP_Doc
         semFunBndTps         : Seq PP_Doc
         sem_nt               : PP_Doc
         sem_prod             : PP_Doc
         t_visits             : PP_Doc
         visitKinds           : Map VisitIdentifier VisitKind
         visitdefs            : Map VisitIdentifier (Set Identifier)
         visituses            : Map VisitIdentifier (Set Identifier)
   alternatives:
      alternative EProduction:
         child con            : {ConstructorIdent}
         child params         : {[Identifier]}
         child constraints    : {[Type]}
         child rules          : ERules 
         child children       : EChildren 
         child visits         : Visits 
         visit 0:
            local o_records   : _
            local t_params    : _
            local t_c_params  : _
            local conname     : _
            local recname     : _
            local semFunBndDef : _
            local semFunBndTp : _
            local semFunBndNm : _
            local o_sigs      : _
            local t_type      : _
            local semname     : _
            local sem_res_tp  : _
            local sem_tp      : _
            local initializer : _
            local sem_prod    : _
            local prod_body   : _
            local statefuns   : _
            local genstfn     : _
            local stargs      : _
            local stvisits    : _
            local stks        : _
            local stvs        : _
            local lazyIntras  : _
            local childTypes  : _
            local localAttrTypes : _
-}
-- cata
sem_EProduction :: EProduction ->
                   T_EProduction
sem_EProduction (EProduction _con _params _constraints _rules _children _visits) =
    (sem_EProduction_EProduction _con _params _constraints (sem_ERules _rules) (sem_EChildren _children) (sem_Visits _visits))
-- semantic domain
newtype T_EProduction = T_EProduction ((Map VisitIdentifier (Int,Int)) ->
                                       (Map NontermIdent Attributes) ->
                                       (Map NontermIdent Int) ->
                                       (Map NontermIdent Attributes) ->
                                       (Map VisitIdentifier VisitKind) ->
                                       (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                                       ([StateIdentifier]) ->
                                       (Map VisitIdentifier (Set Identifier)) ->
                                       (Map VisitIdentifier (Set Identifier)) ->
                                       Attributes ->
                                       StateIdentifier ->
                                       (Map ConstructorIdent (Map Identifier Type)) ->
                                       String ->
                                       String ->
                                       (Map StateIdentifier StateCtx) ->
                                       NontermIdent ->
                                       Type ->
                                       Options ->
                                       ([Identifier]) ->
                                       (Map StateIdentifier StateCtx) ->
                                       Bool ->
                                       Attributes ->
                                       ( ([VisitStateState]),(Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),Int,PP_Doc,PP_Doc,PP_Doc,(Seq Error),(Map VisitIdentifier (Int,Int)),(Seq PP_Doc),(Seq PP_Doc),PP_Doc,PP_Doc,PP_Doc,(Map VisitIdentifier VisitKind),(Map VisitIdentifier (Set Identifier)),(Map VisitIdentifier (Set Identifier))))
data Inh_EProduction = Inh_EProduction {allFromToStates_Inh_EProduction :: (Map VisitIdentifier (Int,Int)),allInhmap_Inh_EProduction :: (Map NontermIdent Attributes),allInitStates_Inh_EProduction :: (Map NontermIdent Int),allSynmap_Inh_EProduction :: (Map NontermIdent Attributes),allVisitKinds_Inh_EProduction :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_EProduction :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),allstates_Inh_EProduction :: ([StateIdentifier]),avisitdefs_Inh_EProduction :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_EProduction :: (Map VisitIdentifier (Set Identifier)),inhmap_Inh_EProduction :: Attributes,initial_Inh_EProduction :: StateIdentifier,localAttrTypes_Inh_EProduction :: (Map ConstructorIdent (Map Identifier Type)),mainFile_Inh_EProduction :: String,mainName_Inh_EProduction :: String,nextVisits_Inh_EProduction :: (Map StateIdentifier StateCtx),nt_Inh_EProduction :: NontermIdent,ntType_Inh_EProduction :: Type,options_Inh_EProduction :: Options,params_Inh_EProduction :: ([Identifier]),prevVisits_Inh_EProduction :: (Map StateIdentifier StateCtx),rename_Inh_EProduction :: Bool,synmap_Inh_EProduction :: Attributes}
data Syn_EProduction = Syn_EProduction {allvisits_Syn_EProduction :: ([VisitStateState]),childvisit_Syn_EProduction :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),count_Syn_EProduction :: Int,datatype_Syn_EProduction :: PP_Doc,datatype_call_Syn_EProduction :: PP_Doc,datatype_con_Syn_EProduction :: PP_Doc,errors_Syn_EProduction :: (Seq Error),fromToStates_Syn_EProduction :: (Map VisitIdentifier (Int,Int)),semFunBndDefs_Syn_EProduction :: (Seq PP_Doc),semFunBndTps_Syn_EProduction :: (Seq PP_Doc),sem_nt_Syn_EProduction :: PP_Doc,sem_prod_Syn_EProduction :: PP_Doc,t_visits_Syn_EProduction :: PP_Doc,visitKinds_Syn_EProduction :: (Map VisitIdentifier VisitKind),visitdefs_Syn_EProduction :: (Map VisitIdentifier (Set Identifier)),visituses_Syn_EProduction :: (Map VisitIdentifier (Set Identifier))}
wrap_EProduction :: T_EProduction ->
                    Inh_EProduction ->
                    Syn_EProduction
wrap_EProduction (T_EProduction sem) (Inh_EProduction _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInextVisits _lhsInt _lhsIntType _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIrename _lhsIsynmap) =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOcount,_lhsOdatatype,_lhsOdatatype_call,_lhsOdatatype_con,_lhsOerrors,_lhsOfromToStates,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInextVisits _lhsInt _lhsIntType _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIrename _lhsIsynmap
     in  (Syn_EProduction _lhsOallvisits _lhsOchildvisit _lhsOcount _lhsOdatatype _lhsOdatatype_call _lhsOdatatype_con _lhsOerrors _lhsOfromToStates _lhsOsemFunBndDefs _lhsOsemFunBndTps _lhsOsem_nt _lhsOsem_prod _lhsOt_visits _lhsOvisitKinds _lhsOvisitdefs _lhsOvisituses))
sem_EProduction_EProduction :: ConstructorIdent ->
                               ([Identifier]) ->
                               ([Type]) ->
                               T_ERules ->
                               T_EChildren ->
                               T_Visits ->
                               T_EProduction
sem_EProduction_EProduction con_ params_ constraints_ (T_ERules rules_) (T_EChildren children_) (T_Visits visits_) =
    (T_EProduction (\ _lhsIallFromToStates
                      _lhsIallInhmap
                      _lhsIallInitStates
                      _lhsIallSynmap
                      _lhsIallVisitKinds
                      _lhsIallchildvisit
                      _lhsIallstates
                      _lhsIavisitdefs
                      _lhsIavisituses
                      _lhsIinhmap
                      _lhsIinitial
                      _lhsIlocalAttrTypes
                      _lhsImainFile
                      _lhsImainName
                      _lhsInextVisits
                      _lhsInt
                      _lhsIntType
                      _lhsIoptions
                      _lhsIparams
                      _lhsIprevVisits
                      _lhsIrename
                      _lhsIsynmap ->
                        (let _childrenOcon :: ConstructorIdent
                             _rulesOcon :: ConstructorIdent
                             _visitsOcon :: ConstructorIdent
                             _lhsOdatatype :: PP_Doc
                             _lhsOdatatype_call :: PP_Doc
                             _lhsOdatatype_con :: PP_Doc
                             _lhsOcount :: Int
                             _lhsOsem_nt :: PP_Doc
                             _lhsOsemFunBndDefs :: (Seq PP_Doc)
                             _lhsOsemFunBndTps :: (Seq PP_Doc)
                             _visitsOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                             _visitsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                             _rulesOusageInfo :: (Map Identifier Int)
                             _rulesOruleKinds :: (Map Identifier (Set VisitKind))
                             _visitsOallintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                             _visitsOterminaldefs :: (Set String)
                             _visitsOruledefs :: (Map Identifier (Set String))
                             _visitsOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                             _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                             _lhsOerrors :: (Seq Error)
                             _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                             _lhsOt_visits :: PP_Doc
                             _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                             _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                             _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                             _lhsOallvisits :: ([VisitStateState])
                             _lhsOsem_prod :: PP_Doc
                             _rulesOallInhmap :: (Map NontermIdent Attributes)
                             _rulesOallSynmap :: (Map NontermIdent Attributes)
                             _rulesOchildTypes :: (Map Identifier Type)
                             _rulesOinhmap :: Attributes
                             _rulesOlazyIntras :: (Set String)
                             _rulesOlocalAttrTypes :: (Map Identifier Type)
                             _rulesOmainFile :: String
                             _rulesOmainName :: String
                             _rulesOnt :: NontermIdent
                             _rulesOoptions :: Options
                             _rulesOsynmap :: Attributes
                             _childrenOallInitStates :: (Map NontermIdent Int)
                             _childrenOmainFile :: String
                             _childrenOmainName :: String
                             _childrenOnt :: NontermIdent
                             _childrenOoptions :: Options
                             _visitsOallFromToStates :: (Map VisitIdentifier (Int,Int))
                             _visitsOallInhmap :: (Map NontermIdent Attributes)
                             _visitsOallInitStates :: (Map NontermIdent Int)
                             _visitsOallSynmap :: (Map NontermIdent Attributes)
                             _visitsOallVisitKinds :: (Map VisitIdentifier VisitKind)
                             _visitsOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                             _visitsOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                             _visitsOavisituses :: (Map VisitIdentifier (Set Identifier))
                             _visitsOchildTypes :: (Map Identifier Type)
                             _visitsOinhmap :: Attributes
                             _visitsOnextVisits :: (Map StateIdentifier StateCtx)
                             _visitsOnt :: NontermIdent
                             _visitsOoptions :: Options
                             _visitsOparams :: ([Identifier])
                             _visitsOprevVisits :: (Map StateIdentifier StateCtx)
                             _visitsOsynmap :: Attributes
                             _rulesIerrors :: (Seq Error)
                             _rulesImrules :: (Map Identifier (VisitKind -> Either Error PP_Doc))
                             _rulesIruledefs :: (Map Identifier (Set String))
                             _rulesIruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                             _rulesIsem_rules :: PP_Doc
                             _childrenIargnamesw :: ([PP_Doc])
                             _childrenIchildTypes :: (Map Identifier Type)
                             _childrenIchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                             _childrenIsigs :: ([(PP_Doc,PP_Doc,PP_Doc,PP_Doc)])
                             _childrenIterminaldefs :: (Set String)
                             _visitsIallvisits :: ([VisitStateState])
                             _visitsIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                             _visitsIerrors :: (Seq Error)
                             _visitsIfromToStates :: (Map VisitIdentifier (Int,Int))
                             _visitsIintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                             _visitsIlazyIntras :: (Set String)
                             _visitsIruleKinds :: (Map Identifier (Set VisitKind))
                             _visitsIruleUsage :: (Map Identifier Int)
                             _visitsIsem_visit :: ( [(StateIdentifier,PP_Doc)] )
                             _visitsIt_visits :: PP_Doc
                             _visitsIvisitKinds :: (Map VisitIdentifier VisitKind)
                             _visitsIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                             _visitsIvisituses :: (Map VisitIdentifier (Set Identifier))
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 88, column 31)
                             _childrenOcon =
                                 ({-# LINE 88 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  con_
                                  {-# LINE 2397 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 89, column 3)
                             _rulesOcon =
                                 ({-# LINE 89 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  con_
                                  {-# LINE 2403 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 90, column 3)
                             _visitsOcon =
                                 ({-# LINE 90 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  con_
                                  {-# LINE 2409 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 256, column 3)
                             _o_records =
                                 ({-# LINE 256 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  dataRecords _lhsIoptions
                                  {-# LINE 2415 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 257, column 3)
                             _t_params =
                                 ({-# LINE 257 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  ppTypeParams _lhsIparams
                                  {-# LINE 2421 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 258, column 3)
                             _t_c_params =
                                 ({-# LINE 258 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  ppTypeParams (cont_tvar : map pp params_)
                                  {-# LINE 2427 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 259, column 3)
                             _conname =
                                 ({-# LINE 259 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  conname _lhsIrename _lhsInt con_
                                  {-# LINE 2433 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 260, column 3)
                             _recname =
                                 ({-# LINE 260 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  pp "fields_" >|< _conname
                                  {-# LINE 2439 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 261, column 3)
                             _lhsOdatatype =
                                 ({-# LINE 261 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  "and" >#< _t_params     >#< _recname     >#< "="
                                  >#< ppFieldsType _o_records     False _childrenIsigs
                                  {-# LINE 2446 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 263, column 3)
                             _lhsOdatatype_call =
                                 ({-# LINE 263 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  pp "|" >#< _conname     >#< "of" >#< pp_parens (_t_params     >#< _recname    )
                                  {-# LINE 2452 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 264, column 3)
                             _lhsOdatatype_con =
                                 ({-# LINE 264 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  let funNm  = _lhsInt >|< "_" >|< con_
                                      decl   = "and" >#< ppFunDecl _o_sigs     funNm params (_t_params     >#< _lhsInt) body
                                      params = [ (x, t) | (_,x,_,t) <- _childrenIsigs ]
                                      body   = _conname     >#< ppFieldsVal _o_records     _childrenIsigs
                                  in decl
                                  {-# LINE 2462 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 380, column 32)
                             _lhsOcount =
                                 ({-# LINE 380 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  1
                                  {-# LINE 2468 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 385, column 3)
                             _lhsOsem_nt =
                                 ({-# LINE 385 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  "|" >#< conname _lhsIrename _lhsInt con_ >#< ppFieldsVal _o_records     _childrenIsigs >#< "->" >#<
                                    prefix _lhsIoptions >|< _lhsInt >|< "_" >|< con_ >#< ppSpaced _childrenIargnamesw
                                  {-# LINE 2475 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 651, column 3)
                             _lhsOsemFunBndDefs =
                                 ({-# LINE 651 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  Seq.singleton _semFunBndDef
                                  {-# LINE 2481 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 652, column 3)
                             _lhsOsemFunBndTps =
                                 ({-# LINE 652 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  Seq.singleton _semFunBndTp
                                  {-# LINE 2487 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 653, column 3)
                             _semFunBndDef =
                                 ({-# LINE 653 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _semFunBndNm     >#< "=" >#< _semname
                                  {-# LINE 2493 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 654, column 3)
                             _semFunBndTp =
                                 ({-# LINE 654 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _semFunBndNm     >#< ":" >#< _sem_tp
                                  {-# LINE 2499 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 655, column 3)
                             _semFunBndNm =
                                 ({-# LINE 655 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  lateSemConLabel _lhsInt con_
                                  {-# LINE 2505 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 682, column 3)
                             _o_sigs =
                                 ({-# LINE 682 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  typeSigs _lhsIoptions
                                  {-# LINE 2511 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 683, column 3)
                             _t_type =
                                 ({-# LINE 683 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  type_nt_sem_top _lhsInt
                                  {-# LINE 2517 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 684, column 3)
                             _semname =
                                 ({-# LINE 684 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  prefix _lhsIoptions >|< _lhsInt >|< "_" >|< con_
                                  {-# LINE 2523 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 685, column 3)
                             _sem_res_tp =
                                 ({-# LINE 685 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _t_params     >#< _t_type
                                  {-# LINE 2529 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 686, column 3)
                             _sem_tp =
                                 ({-# LINE 686 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  pp_block "" "" "->" [ d | (_,_,d,_) <- _childrenIsigs ] >#< "->" >#< _sem_res_tp
                                  {-# LINE 2535 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 688, column 3)
                             _initializer =
                                 ({-# LINE 688 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  empty
                                  {-# LINE 2541 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 695, column 3)
                             _sem_prod =
                                 ({-# LINE 695 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  "and" >#< ppFunDecl _o_sigs     _semname     [ (x,d) | (_,x,d,_) <- _childrenIsigs ] _sem_res_tp     _prod_body
                                  {-# LINE 2547 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 696, column 3)
                             _prod_body =
                                 ({-# LINE 696 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _initializer
                                  >-< "{" >#< nm_attach _lhsInt >#< "=" >#< "function () ->"
                                  >-< indent 2
                                      (   "(* rules of production" >#< con_ >#< "*)"
                                      >-< _rulesIsem_rules
                                      >-< "(* states of production" >#< con_ >#< "*)"
                                      >-< vlist _statefuns
                                      >-< nm_st _lhsIinitial
                                      )
                                  >#< "}"
                                  {-# LINE 2562 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 713, column 3)
                             _statefuns =
                                 ({-# LINE 713 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  map _genstfn     _lhsIallstates
                                  {-# LINE 2568 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 714, column 3)
                             _genstfn =
                                 ({-# LINE 714 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  \st -> let nextVisitInfo = Map.findWithDefault ManyVis st _lhsInextVisits
                                             stNm = nm_st st
                                             stDef body = "let" >#< stNm >#< (if st == _lhsIinitial then empty else _stargs     st) >#< "="
                                                          >-< indent 2 body >#< "in"
                                         in case nextVisitInfo of
                                              NoneVis ->
                                                         if st == _lhsIinitial
                                                         then stDef (pp "unit")
                                                         else empty
                                              _       -> stDef $ mklets (_stvs     st ++ _stks     st) $ ppRecordVal
                                                           [ nm_invoke _lhsInt st >#< "=" >#< nm_k st ]
                                  {-# LINE 2584 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 734, column 3)
                             _stargs =
                                 ({-# LINE 734 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  \st -> let attrs = maybe Map.empty id $ Map.lookup st _visitsIintramap in ppSpaced
                                           [ case mbAttr of
                                               Just (AttrSyn child nm) | child == _LOC && not (noPerStateTypeSigs _lhsIoptions) ->
                                                 case Map.lookup nm _localAttrTypes     of
                                                   Just tp -> pp_parens (strNm >#< ":" >#< ppTp tp)
                                                   Nothing -> pp strNm
                                               Just attr | not (noPerStateTypeSigs _lhsIoptions) ->
                                                 case lookupAttrType attr _lhsIallInhmap _lhsIallSynmap _childTypes     of
                                                   Just tpDoc -> pp_parens (strNm >#< ":" >#< tpDoc)
                                                   Nothing    -> pp strNm
                                               _ -> pp strNm
                                           | (strNm, mbAttr) <- Map.assocs attrs
                                           ] >#< dummyPat _lhsIoptions (Map.null attrs)
                                  {-# LINE 2602 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 750, column 3)
                             _stvisits =
                                 ({-# LINE 750 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  \st -> filter (\(_,f,_) -> f == st) _visitsIallvisits
                                  {-# LINE 2608 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 751, column 3)
                             _stks =
                                 ({-# LINE 751 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  \st -> let stvisits = _stvisits     st
                                             def = ppFunDecl False                   (pp $ nm_k st)
                                                     [(pp "arg", _t_c_params     >#< type_caller _lhsInt st)] (pp cont_tvar) body
                                             nextVisitInfo = Map.findWithDefault ManyVis st _lhsInextVisits
                                             body = case nextVisitInfo of
                                               NoneVis  -> text "?no next visit?"
                                               OneVis v -> dispatch "arg" v
                                               ManyVis  -> let alt (v,_,_) = "|" >#< con_visit _lhsInt v >#< "chosen" >#< "->" >-< indent 2 (dispatch "chosen" v)
                                                           in "match arg with" >-< (indent 2 $ vlist $ map alt stvisits)
                                             dispatch nm v = "let" >#< ppRecordVal
                                                               [ nm_inh _lhsInt v >#< "=" >#< "inp"
                                                               , nm_cont _lhsInt v >#< "=" >#< "cont" ]
                                                             >#< "=" >#< pp nm
                                                             >-< "in" >#< "cont" >#< pp_parens (nm_visit v >#< "inp")
                                         in if null stvisits
                                            then []
                                            else [ "(* k-function for production" >#< con_ >#< " *)" >-< def ]
                                  {-# LINE 2630 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 773, column 3)
                             _stvs =
                                 ({-# LINE 773 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  \st -> [ppf | (f,ppf) <- _visitsIsem_visit, f == st]
                                  {-# LINE 2636 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 774, column 3)
                             _visitsOmrules =
                                 ({-# LINE 774 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _rulesImrules
                                  {-# LINE 2642 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 915, column 3)
                             _visitsOchildintros =
                                 ({-# LINE 915 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _childrenIchildintros
                                  {-# LINE 2648 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1220, column 32)
                             _rulesOusageInfo =
                                 ({-# LINE 1220 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIruleUsage
                                  {-# LINE 2654 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1235, column 3)
                             _rulesOruleKinds =
                                 ({-# LINE 1235 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIruleKinds
                                  {-# LINE 2660 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1264, column 3)
                             _visitsOallintramap =
                                 ({-# LINE 1264 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIintramap
                                  {-# LINE 2666 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1265, column 3)
                             _visitsOterminaldefs =
                                 ({-# LINE 1265 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _childrenIterminaldefs
                                  {-# LINE 2672 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1289, column 17)
                             _visitsOruledefs =
                                 ({-# LINE 1289 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _rulesIruledefs
                                  {-# LINE 2678 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1290, column 17)
                             _visitsOruleuses =
                                 ({-# LINE 1290 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _rulesIruleuses
                                  {-# LINE 2684 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1344, column 3)
                             _lazyIntras =
                                 ({-# LINE 1344 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIlazyIntras
                                  {-# LINE 2690 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1416, column 3)
                             _childTypes =
                                 ({-# LINE 1416 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  Map.singleton _LHS _lhsIntType `Map.union` _childrenIchildTypes
                                  {-# LINE 2696 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- "./src-ag/ExecutionPlan2Caml.ag"(line 1433, column 3)
                             _localAttrTypes =
                                 ({-# LINE 1433 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  Map.findWithDefault Map.empty con_ _lhsIlocalAttrTypes
                                  {-# LINE 2702 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                             _lhsOchildvisit =
                                 ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIchildvisit
                                  {-# LINE 2708 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                             _lhsOerrors =
                                 ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _rulesIerrors Seq.>< _visitsIerrors
                                  {-# LINE 2714 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                             _lhsOfromToStates =
                                 ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIfromToStates
                                  {-# LINE 2720 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 527, column 59)
                             _lhsOt_visits =
                                 ({-# LINE 527 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIt_visits
                                  {-# LINE 2726 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                             _lhsOvisitKinds =
                                 ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIvisitKinds
                                  {-# LINE 2732 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                             _lhsOvisitdefs =
                                 ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIvisitdefs
                                  {-# LINE 2738 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                             _lhsOvisituses =
                                 ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIvisituses
                                  {-# LINE 2744 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (up)
                             _lhsOallvisits =
                                 ({-# LINE 429 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _visitsIallvisits
                                  {-# LINE 2750 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (from local)
                             _lhsOsem_prod =
                                 ({-# LINE 672 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _sem_prod
                                  {-# LINE 2756 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOallInhmap =
                                 ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallInhmap
                                  {-# LINE 2762 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOallSynmap =
                                 ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallSynmap
                                  {-# LINE 2768 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (from local)
                             _rulesOchildTypes =
                                 ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _childTypes
                                  {-# LINE 2774 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOinhmap =
                                 ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIinhmap
                                  {-# LINE 2780 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (from local)
                             _rulesOlazyIntras =
                                 ({-# LINE 1330 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lazyIntras
                                  {-# LINE 2786 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (from local)
                             _rulesOlocalAttrTypes =
                                 ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _localAttrTypes
                                  {-# LINE 2792 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOmainFile =
                                 ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsImainFile
                                  {-# LINE 2798 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOmainName =
                                 ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsImainName
                                  {-# LINE 2804 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOnt =
                                 ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsInt
                                  {-# LINE 2810 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOoptions =
                                 ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 2816 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _rulesOsynmap =
                                 ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIsynmap
                                  {-# LINE 2822 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _childrenOallInitStates =
                                 ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallInitStates
                                  {-# LINE 2828 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _childrenOmainFile =
                                 ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsImainFile
                                  {-# LINE 2834 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _childrenOmainName =
                                 ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsImainName
                                  {-# LINE 2840 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _childrenOnt =
                                 ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsInt
                                  {-# LINE 2846 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _childrenOoptions =
                                 ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 2852 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOallFromToStates =
                                 ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallFromToStates
                                  {-# LINE 2858 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOallInhmap =
                                 ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallInhmap
                                  {-# LINE 2864 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOallInitStates =
                                 ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallInitStates
                                  {-# LINE 2870 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOallSynmap =
                                 ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallSynmap
                                  {-# LINE 2876 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOallVisitKinds =
                                 ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallVisitKinds
                                  {-# LINE 2882 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOallchildvisit =
                                 ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIallchildvisit
                                  {-# LINE 2888 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOavisitdefs =
                                 ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIavisitdefs
                                  {-# LINE 2894 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOavisituses =
                                 ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIavisituses
                                  {-# LINE 2900 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (from local)
                             _visitsOchildTypes =
                                 ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _childTypes
                                  {-# LINE 2906 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOinhmap =
                                 ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIinhmap
                                  {-# LINE 2912 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOnextVisits =
                                 ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsInextVisits
                                  {-# LINE 2918 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOnt =
                                 ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsInt
                                  {-# LINE 2924 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOoptions =
                                 ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIoptions
                                  {-# LINE 2930 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOparams =
                                 ({-# LINE 92 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIparams
                                  {-# LINE 2936 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOprevVisits =
                                 ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIprevVisits
                                  {-# LINE 2942 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             -- copy rule (down)
                             _visitsOsynmap =
                                 ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                  _lhsIsynmap
                                  {-# LINE 2948 "dist/build/ExecutionPlan2Caml.hs" #-}
                                  )
                             ( _rulesIerrors,_rulesImrules,_rulesIruledefs,_rulesIruleuses,_rulesIsem_rules) =
                                 rules_ _rulesOallInhmap _rulesOallSynmap _rulesOchildTypes _rulesOcon _rulesOinhmap _rulesOlazyIntras _rulesOlocalAttrTypes _rulesOmainFile _rulesOmainName _rulesOnt _rulesOoptions _rulesOruleKinds _rulesOsynmap _rulesOusageInfo
                             ( _childrenIargnamesw,_childrenIchildTypes,_childrenIchildintros,_childrenIsigs,_childrenIterminaldefs) =
                                 children_ _childrenOallInitStates _childrenOcon _childrenOmainFile _childrenOmainName _childrenOnt _childrenOoptions
                             ( _visitsIallvisits,_visitsIchildvisit,_visitsIerrors,_visitsIfromToStates,_visitsIintramap,_visitsIlazyIntras,_visitsIruleKinds,_visitsIruleUsage,_visitsIsem_visit,_visitsIt_visits,_visitsIvisitKinds,_visitsIvisitdefs,_visitsIvisituses) =
                                 visits_ _visitsOallFromToStates _visitsOallInhmap _visitsOallInitStates _visitsOallSynmap _visitsOallVisitKinds _visitsOallchildvisit _visitsOallintramap _visitsOavisitdefs _visitsOavisituses _visitsOchildTypes _visitsOchildintros _visitsOcon _visitsOinhmap _visitsOmrules _visitsOnextVisits _visitsOnt _visitsOoptions _visitsOparams _visitsOprevVisits _visitsOruledefs _visitsOruleuses _visitsOsynmap _visitsOterminaldefs
                         in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOcount,_lhsOdatatype,_lhsOdatatype_call,_lhsOdatatype_con,_lhsOerrors,_lhsOfromToStates,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
-- EProductions ------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInhmap            : Map NontermIdent Attributes
         allInitStates        : Map NontermIdent Int
         allSynmap            : Map NontermIdent Attributes
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         allstates            : [StateIdentifier]
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         inhmap               : Attributes
         initial              : StateIdentifier
         localAttrTypes       : Map ConstructorIdent (Map Identifier Type)
         mainFile             : String
         mainName             : String
         nextVisits           : Map StateIdentifier StateCtx
         nt                   : NontermIdent
         ntType               : Type
         options              : Options
         params               : [Identifier]
         prevVisits           : Map StateIdentifier StateCtx
         rename               : Bool
         synmap               : Attributes
      synthesized attributes:
         allvisits            : [VisitStateState]
         childvisit           : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         count                : Int
         datatype             : [PP_Doc]
         datatype_call        : [PP_Doc]
         datatype_con         : [PP_Doc]
         errors               : Seq Error
         fromToStates         : Map VisitIdentifier (Int,Int)
         semFunBndDefs        : Seq PP_Doc
         semFunBndTps         : Seq PP_Doc
         sem_nt               : PP_Doc
         sem_prod             : PP_Doc
         t_visits             : PP_Doc
         visitKinds           : Map VisitIdentifier VisitKind
         visitdefs            : Map VisitIdentifier (Set Identifier)
         visituses            : Map VisitIdentifier (Set Identifier)
   alternatives:
      alternative Cons:
         child hd             : EProduction 
         child tl             : EProductions 
      alternative Nil:
-}
-- cata
sem_EProductions :: EProductions ->
                    T_EProductions
sem_EProductions list =
    (Prelude.foldr sem_EProductions_Cons sem_EProductions_Nil (Prelude.map sem_EProduction list))
-- semantic domain
newtype T_EProductions = T_EProductions ((Map VisitIdentifier (Int,Int)) ->
                                         (Map NontermIdent Attributes) ->
                                         (Map NontermIdent Int) ->
                                         (Map NontermIdent Attributes) ->
                                         (Map VisitIdentifier VisitKind) ->
                                         (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                                         ([StateIdentifier]) ->
                                         (Map VisitIdentifier (Set Identifier)) ->
                                         (Map VisitIdentifier (Set Identifier)) ->
                                         Attributes ->
                                         StateIdentifier ->
                                         (Map ConstructorIdent (Map Identifier Type)) ->
                                         String ->
                                         String ->
                                         (Map StateIdentifier StateCtx) ->
                                         NontermIdent ->
                                         Type ->
                                         Options ->
                                         ([Identifier]) ->
                                         (Map StateIdentifier StateCtx) ->
                                         Bool ->
                                         Attributes ->
                                         ( ([VisitStateState]),(Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),Int,([PP_Doc]),([PP_Doc]),([PP_Doc]),(Seq Error),(Map VisitIdentifier (Int,Int)),(Seq PP_Doc),(Seq PP_Doc),PP_Doc,PP_Doc,PP_Doc,(Map VisitIdentifier VisitKind),(Map VisitIdentifier (Set Identifier)),(Map VisitIdentifier (Set Identifier))))
data Inh_EProductions = Inh_EProductions {allFromToStates_Inh_EProductions :: (Map VisitIdentifier (Int,Int)),allInhmap_Inh_EProductions :: (Map NontermIdent Attributes),allInitStates_Inh_EProductions :: (Map NontermIdent Int),allSynmap_Inh_EProductions :: (Map NontermIdent Attributes),allVisitKinds_Inh_EProductions :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_EProductions :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),allstates_Inh_EProductions :: ([StateIdentifier]),avisitdefs_Inh_EProductions :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_EProductions :: (Map VisitIdentifier (Set Identifier)),inhmap_Inh_EProductions :: Attributes,initial_Inh_EProductions :: StateIdentifier,localAttrTypes_Inh_EProductions :: (Map ConstructorIdent (Map Identifier Type)),mainFile_Inh_EProductions :: String,mainName_Inh_EProductions :: String,nextVisits_Inh_EProductions :: (Map StateIdentifier StateCtx),nt_Inh_EProductions :: NontermIdent,ntType_Inh_EProductions :: Type,options_Inh_EProductions :: Options,params_Inh_EProductions :: ([Identifier]),prevVisits_Inh_EProductions :: (Map StateIdentifier StateCtx),rename_Inh_EProductions :: Bool,synmap_Inh_EProductions :: Attributes}
data Syn_EProductions = Syn_EProductions {allvisits_Syn_EProductions :: ([VisitStateState]),childvisit_Syn_EProductions :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),count_Syn_EProductions :: Int,datatype_Syn_EProductions :: ([PP_Doc]),datatype_call_Syn_EProductions :: ([PP_Doc]),datatype_con_Syn_EProductions :: ([PP_Doc]),errors_Syn_EProductions :: (Seq Error),fromToStates_Syn_EProductions :: (Map VisitIdentifier (Int,Int)),semFunBndDefs_Syn_EProductions :: (Seq PP_Doc),semFunBndTps_Syn_EProductions :: (Seq PP_Doc),sem_nt_Syn_EProductions :: PP_Doc,sem_prod_Syn_EProductions :: PP_Doc,t_visits_Syn_EProductions :: PP_Doc,visitKinds_Syn_EProductions :: (Map VisitIdentifier VisitKind),visitdefs_Syn_EProductions :: (Map VisitIdentifier (Set Identifier)),visituses_Syn_EProductions :: (Map VisitIdentifier (Set Identifier))}
wrap_EProductions :: T_EProductions ->
                     Inh_EProductions ->
                     Syn_EProductions
wrap_EProductions (T_EProductions sem) (Inh_EProductions _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInextVisits _lhsInt _lhsIntType _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIrename _lhsIsynmap) =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOcount,_lhsOdatatype,_lhsOdatatype_call,_lhsOdatatype_con,_lhsOerrors,_lhsOfromToStates,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallstates _lhsIavisitdefs _lhsIavisituses _lhsIinhmap _lhsIinitial _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInextVisits _lhsInt _lhsIntType _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIrename _lhsIsynmap
     in  (Syn_EProductions _lhsOallvisits _lhsOchildvisit _lhsOcount _lhsOdatatype _lhsOdatatype_call _lhsOdatatype_con _lhsOerrors _lhsOfromToStates _lhsOsemFunBndDefs _lhsOsemFunBndTps _lhsOsem_nt _lhsOsem_prod _lhsOt_visits _lhsOvisitKinds _lhsOvisitdefs _lhsOvisituses))
sem_EProductions_Cons :: T_EProduction ->
                         T_EProductions ->
                         T_EProductions
sem_EProductions_Cons (T_EProduction hd_) (T_EProductions tl_) =
    (T_EProductions (\ _lhsIallFromToStates
                       _lhsIallInhmap
                       _lhsIallInitStates
                       _lhsIallSynmap
                       _lhsIallVisitKinds
                       _lhsIallchildvisit
                       _lhsIallstates
                       _lhsIavisitdefs
                       _lhsIavisituses
                       _lhsIinhmap
                       _lhsIinitial
                       _lhsIlocalAttrTypes
                       _lhsImainFile
                       _lhsImainName
                       _lhsInextVisits
                       _lhsInt
                       _lhsIntType
                       _lhsIoptions
                       _lhsIparams
                       _lhsIprevVisits
                       _lhsIrename
                       _lhsIsynmap ->
                         (let _lhsOallvisits :: ([VisitStateState])
                              _lhsOt_visits :: PP_Doc
                              _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _lhsOcount :: Int
                              _lhsOdatatype :: ([PP_Doc])
                              _lhsOdatatype_call :: ([PP_Doc])
                              _lhsOdatatype_con :: ([PP_Doc])
                              _lhsOerrors :: (Seq Error)
                              _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                              _lhsOsemFunBndDefs :: (Seq PP_Doc)
                              _lhsOsemFunBndTps :: (Seq PP_Doc)
                              _lhsOsem_nt :: PP_Doc
                              _lhsOsem_prod :: PP_Doc
                              _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                              _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                              _hdOallFromToStates :: (Map VisitIdentifier (Int,Int))
                              _hdOallInhmap :: (Map NontermIdent Attributes)
                              _hdOallInitStates :: (Map NontermIdent Int)
                              _hdOallSynmap :: (Map NontermIdent Attributes)
                              _hdOallVisitKinds :: (Map VisitIdentifier VisitKind)
                              _hdOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _hdOallstates :: ([StateIdentifier])
                              _hdOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _hdOavisituses :: (Map VisitIdentifier (Set Identifier))
                              _hdOinhmap :: Attributes
                              _hdOinitial :: StateIdentifier
                              _hdOlocalAttrTypes :: (Map ConstructorIdent (Map Identifier Type))
                              _hdOmainFile :: String
                              _hdOmainName :: String
                              _hdOnextVisits :: (Map StateIdentifier StateCtx)
                              _hdOnt :: NontermIdent
                              _hdOntType :: Type
                              _hdOoptions :: Options
                              _hdOparams :: ([Identifier])
                              _hdOprevVisits :: (Map StateIdentifier StateCtx)
                              _hdOrename :: Bool
                              _hdOsynmap :: Attributes
                              _tlOallFromToStates :: (Map VisitIdentifier (Int,Int))
                              _tlOallInhmap :: (Map NontermIdent Attributes)
                              _tlOallInitStates :: (Map NontermIdent Int)
                              _tlOallSynmap :: (Map NontermIdent Attributes)
                              _tlOallVisitKinds :: (Map VisitIdentifier VisitKind)
                              _tlOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _tlOallstates :: ([StateIdentifier])
                              _tlOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _tlOavisituses :: (Map VisitIdentifier (Set Identifier))
                              _tlOinhmap :: Attributes
                              _tlOinitial :: StateIdentifier
                              _tlOlocalAttrTypes :: (Map ConstructorIdent (Map Identifier Type))
                              _tlOmainFile :: String
                              _tlOmainName :: String
                              _tlOnextVisits :: (Map StateIdentifier StateCtx)
                              _tlOnt :: NontermIdent
                              _tlOntType :: Type
                              _tlOoptions :: Options
                              _tlOparams :: ([Identifier])
                              _tlOprevVisits :: (Map StateIdentifier StateCtx)
                              _tlOrename :: Bool
                              _tlOsynmap :: Attributes
                              _hdIallvisits :: ([VisitStateState])
                              _hdIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _hdIcount :: Int
                              _hdIdatatype :: PP_Doc
                              _hdIdatatype_call :: PP_Doc
                              _hdIdatatype_con :: PP_Doc
                              _hdIerrors :: (Seq Error)
                              _hdIfromToStates :: (Map VisitIdentifier (Int,Int))
                              _hdIsemFunBndDefs :: (Seq PP_Doc)
                              _hdIsemFunBndTps :: (Seq PP_Doc)
                              _hdIsem_nt :: PP_Doc
                              _hdIsem_prod :: PP_Doc
                              _hdIt_visits :: PP_Doc
                              _hdIvisitKinds :: (Map VisitIdentifier VisitKind)
                              _hdIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _hdIvisituses :: (Map VisitIdentifier (Set Identifier))
                              _tlIallvisits :: ([VisitStateState])
                              _tlIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _tlIcount :: Int
                              _tlIdatatype :: ([PP_Doc])
                              _tlIdatatype_call :: ([PP_Doc])
                              _tlIdatatype_con :: ([PP_Doc])
                              _tlIerrors :: (Seq Error)
                              _tlIfromToStates :: (Map VisitIdentifier (Int,Int))
                              _tlIsemFunBndDefs :: (Seq PP_Doc)
                              _tlIsemFunBndTps :: (Seq PP_Doc)
                              _tlIsem_nt :: PP_Doc
                              _tlIsem_prod :: PP_Doc
                              _tlIt_visits :: PP_Doc
                              _tlIvisitKinds :: (Map VisitIdentifier VisitKind)
                              _tlIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _tlIvisituses :: (Map VisitIdentifier (Set Identifier))
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 435, column 10)
                              _lhsOallvisits =
                                  ({-# LINE 435 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIallvisits
                                   {-# LINE 3165 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 530, column 3)
                              _lhsOt_visits =
                                  ({-# LINE 530 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIt_visits
                                   {-# LINE 3171 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                              _lhsOchildvisit =
                                  ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIchildvisit `Map.union` _tlIchildvisit
                                   {-# LINE 3177 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 379, column 43)
                              _lhsOcount =
                                  ({-# LINE 379 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIcount + _tlIcount
                                   {-# LINE 3183 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 253, column 63)
                              _lhsOdatatype =
                                  ({-# LINE 253 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIdatatype : _tlIdatatype
                                   {-# LINE 3189 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 253, column 63)
                              _lhsOdatatype_call =
                                  ({-# LINE 253 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIdatatype_call : _tlIdatatype_call
                                   {-# LINE 3195 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 253, column 63)
                              _lhsOdatatype_con =
                                  ({-# LINE 253 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIdatatype_con : _tlIdatatype_con
                                   {-# LINE 3201 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                              _lhsOerrors =
                                  ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIerrors Seq.>< _tlIerrors
                                   {-# LINE 3207 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                              _lhsOfromToStates =
                                  ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIfromToStates `mappend` _tlIfromToStates
                                   {-# LINE 3213 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                              _lhsOsemFunBndDefs =
                                  ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIsemFunBndDefs Seq.>< _tlIsemFunBndDefs
                                   {-# LINE 3219 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                              _lhsOsemFunBndTps =
                                  ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIsemFunBndTps Seq.>< _tlIsemFunBndTps
                                   {-# LINE 3225 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 383, column 44)
                              _lhsOsem_nt =
                                  ({-# LINE 383 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIsem_nt >-< _tlIsem_nt
                                   {-# LINE 3231 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 673, column 34)
                              _lhsOsem_prod =
                                  ({-# LINE 673 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIsem_prod >-< _tlIsem_prod
                                   {-# LINE 3237 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                              _lhsOvisitKinds =
                                  ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIvisitKinds `mappend` _tlIvisitKinds
                                   {-# LINE 3243 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                              _lhsOvisitdefs =
                                  ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIvisitdefs `uwSetUnion` _tlIvisitdefs
                                   {-# LINE 3249 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                              _lhsOvisituses =
                                  ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _hdIvisituses `uwSetUnion` _tlIvisituses
                                   {-# LINE 3255 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallFromToStates =
                                  ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallFromToStates
                                   {-# LINE 3261 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallInhmap =
                                  ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallInhmap
                                   {-# LINE 3267 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallInitStates =
                                  ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallInitStates
                                   {-# LINE 3273 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallSynmap =
                                  ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallSynmap
                                   {-# LINE 3279 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallVisitKinds =
                                  ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallVisitKinds
                                   {-# LINE 3285 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallchildvisit =
                                  ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallchildvisit
                                   {-# LINE 3291 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOallstates =
                                  ({-# LINE 676 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallstates
                                   {-# LINE 3297 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOavisitdefs =
                                  ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIavisitdefs
                                   {-# LINE 3303 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOavisituses =
                                  ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIavisituses
                                   {-# LINE 3309 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOinhmap =
                                  ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIinhmap
                                   {-# LINE 3315 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOinitial =
                                  ({-# LINE 675 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIinitial
                                   {-# LINE 3321 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOlocalAttrTypes =
                                  ({-# LINE 1426 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIlocalAttrTypes
                                   {-# LINE 3327 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOmainFile =
                                  ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsImainFile
                                   {-# LINE 3333 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOmainName =
                                  ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsImainName
                                   {-# LINE 3339 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOnextVisits =
                                  ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsInextVisits
                                   {-# LINE 3345 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOnt =
                                  ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsInt
                                   {-# LINE 3351 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOntType =
                                  ({-# LINE 1469 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIntType
                                   {-# LINE 3357 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOoptions =
                                  ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 3363 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOparams =
                                  ({-# LINE 92 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIparams
                                   {-# LINE 3369 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOprevVisits =
                                  ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIprevVisits
                                   {-# LINE 3375 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOrename =
                                  ({-# LINE 73 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIrename
                                   {-# LINE 3381 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _hdOsynmap =
                                  ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIsynmap
                                   {-# LINE 3387 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallFromToStates =
                                  ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallFromToStates
                                   {-# LINE 3393 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallInhmap =
                                  ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallInhmap
                                   {-# LINE 3399 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallInitStates =
                                  ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallInitStates
                                   {-# LINE 3405 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallSynmap =
                                  ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallSynmap
                                   {-# LINE 3411 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallVisitKinds =
                                  ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallVisitKinds
                                   {-# LINE 3417 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallchildvisit =
                                  ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallchildvisit
                                   {-# LINE 3423 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOallstates =
                                  ({-# LINE 676 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIallstates
                                   {-# LINE 3429 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOavisitdefs =
                                  ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIavisitdefs
                                   {-# LINE 3435 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOavisituses =
                                  ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIavisituses
                                   {-# LINE 3441 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOinhmap =
                                  ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIinhmap
                                   {-# LINE 3447 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOinitial =
                                  ({-# LINE 675 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIinitial
                                   {-# LINE 3453 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOlocalAttrTypes =
                                  ({-# LINE 1426 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIlocalAttrTypes
                                   {-# LINE 3459 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOmainFile =
                                  ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsImainFile
                                   {-# LINE 3465 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOmainName =
                                  ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsImainName
                                   {-# LINE 3471 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOnextVisits =
                                  ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsInextVisits
                                   {-# LINE 3477 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOnt =
                                  ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsInt
                                   {-# LINE 3483 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOntType =
                                  ({-# LINE 1469 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIntType
                                   {-# LINE 3489 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOoptions =
                                  ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIoptions
                                   {-# LINE 3495 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOparams =
                                  ({-# LINE 92 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIparams
                                   {-# LINE 3501 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOprevVisits =
                                  ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIprevVisits
                                   {-# LINE 3507 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOrename =
                                  ({-# LINE 73 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIrename
                                   {-# LINE 3513 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- copy rule (down)
                              _tlOsynmap =
                                  ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   _lhsIsynmap
                                   {-# LINE 3519 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              ( _hdIallvisits,_hdIchildvisit,_hdIcount,_hdIdatatype,_hdIdatatype_call,_hdIdatatype_con,_hdIerrors,_hdIfromToStates,_hdIsemFunBndDefs,_hdIsemFunBndTps,_hdIsem_nt,_hdIsem_prod,_hdIt_visits,_hdIvisitKinds,_hdIvisitdefs,_hdIvisituses) =
                                  hd_ _hdOallFromToStates _hdOallInhmap _hdOallInitStates _hdOallSynmap _hdOallVisitKinds _hdOallchildvisit _hdOallstates _hdOavisitdefs _hdOavisituses _hdOinhmap _hdOinitial _hdOlocalAttrTypes _hdOmainFile _hdOmainName _hdOnextVisits _hdOnt _hdOntType _hdOoptions _hdOparams _hdOprevVisits _hdOrename _hdOsynmap
                              ( _tlIallvisits,_tlIchildvisit,_tlIcount,_tlIdatatype,_tlIdatatype_call,_tlIdatatype_con,_tlIerrors,_tlIfromToStates,_tlIsemFunBndDefs,_tlIsemFunBndTps,_tlIsem_nt,_tlIsem_prod,_tlIt_visits,_tlIvisitKinds,_tlIvisitdefs,_tlIvisituses) =
                                  tl_ _tlOallFromToStates _tlOallInhmap _tlOallInitStates _tlOallSynmap _tlOallVisitKinds _tlOallchildvisit _tlOallstates _tlOavisitdefs _tlOavisituses _tlOinhmap _tlOinitial _tlOlocalAttrTypes _tlOmainFile _tlOmainName _tlOnextVisits _tlOnt _tlOntType _tlOoptions _tlOparams _tlOprevVisits _tlOrename _tlOsynmap
                          in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOcount,_lhsOdatatype,_lhsOdatatype_call,_lhsOdatatype_con,_lhsOerrors,_lhsOfromToStates,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
sem_EProductions_Nil :: T_EProductions
sem_EProductions_Nil =
    (T_EProductions (\ _lhsIallFromToStates
                       _lhsIallInhmap
                       _lhsIallInitStates
                       _lhsIallSynmap
                       _lhsIallVisitKinds
                       _lhsIallchildvisit
                       _lhsIallstates
                       _lhsIavisitdefs
                       _lhsIavisituses
                       _lhsIinhmap
                       _lhsIinitial
                       _lhsIlocalAttrTypes
                       _lhsImainFile
                       _lhsImainName
                       _lhsInextVisits
                       _lhsInt
                       _lhsIntType
                       _lhsIoptions
                       _lhsIparams
                       _lhsIprevVisits
                       _lhsIrename
                       _lhsIsynmap ->
                         (let _lhsOallvisits :: ([VisitStateState])
                              _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                              _lhsOcount :: Int
                              _lhsOdatatype :: ([PP_Doc])
                              _lhsOdatatype_call :: ([PP_Doc])
                              _lhsOdatatype_con :: ([PP_Doc])
                              _lhsOerrors :: (Seq Error)
                              _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                              _lhsOsemFunBndDefs :: (Seq PP_Doc)
                              _lhsOsemFunBndTps :: (Seq PP_Doc)
                              _lhsOsem_nt :: PP_Doc
                              _lhsOsem_prod :: PP_Doc
                              _lhsOt_visits :: PP_Doc
                              _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                              _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                              _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                              -- "./src-ag/ExecutionPlan2Caml.ag"(line 436, column 10)
                              _lhsOallvisits =
                                  ({-# LINE 436 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   error "Every nonterminal should have at least 1 production"
                                   {-# LINE 3570 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                              _lhsOchildvisit =
                                  ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.empty
                                   {-# LINE 3576 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 379, column 43)
                              _lhsOcount =
                                  ({-# LINE 379 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   0
                                   {-# LINE 3582 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 253, column 63)
                              _lhsOdatatype =
                                  ({-# LINE 253 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   []
                                   {-# LINE 3588 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 253, column 63)
                              _lhsOdatatype_call =
                                  ({-# LINE 253 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   []
                                   {-# LINE 3594 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 253, column 63)
                              _lhsOdatatype_con =
                                  ({-# LINE 253 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   []
                                   {-# LINE 3600 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                              _lhsOerrors =
                                  ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Seq.empty
                                   {-# LINE 3606 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                              _lhsOfromToStates =
                                  ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   mempty
                                   {-# LINE 3612 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                              _lhsOsemFunBndDefs =
                                  ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Seq.empty
                                   {-# LINE 3618 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 642, column 92)
                              _lhsOsemFunBndTps =
                                  ({-# LINE 642 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Seq.empty
                                   {-# LINE 3624 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 383, column 44)
                              _lhsOsem_nt =
                                  ({-# LINE 383 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   empty
                                   {-# LINE 3630 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 673, column 34)
                              _lhsOsem_prod =
                                  ({-# LINE 673 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   empty
                                   {-# LINE 3636 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 527, column 59)
                              _lhsOt_visits =
                                  ({-# LINE 527 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   empty
                                   {-# LINE 3642 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                              _lhsOvisitKinds =
                                  ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   mempty
                                   {-# LINE 3648 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                              _lhsOvisitdefs =
                                  ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.empty
                                   {-# LINE 3654 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                              -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                              _lhsOvisituses =
                                  ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                   Map.empty
                                   {-# LINE 3660 "dist/build/ExecutionPlan2Caml.hs" #-}
                                   )
                          in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOcount,_lhsOdatatype,_lhsOdatatype_call,_lhsOdatatype_con,_lhsOerrors,_lhsOfromToStates,_lhsOsemFunBndDefs,_lhsOsemFunBndTps,_lhsOsem_nt,_lhsOsem_prod,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
-- ERule -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allInhmap            : Map NontermIdent Attributes
         allSynmap            : Map NontermIdent Attributes
         childTypes           : Map Identifier Type
         con                  : ConstructorIdent
         inhmap               : Attributes
         lazyIntras           : Set String
         localAttrTypes       : Map Identifier Type
         mainFile             : String
         mainName             : String
         nt                   : NontermIdent
         options              : Options
         ruleKinds            : Map Identifier (Set VisitKind)
         synmap               : Attributes
         usageInfo            : Map Identifier Int
      synthesized attributes:
         errors               : Seq Error
         mrules               : Map Identifier (VisitKind -> Either Error PP_Doc)
         ruledefs             : Map Identifier (Set String)
         ruleuses             : Map Identifier (Map String (Maybe NonLocalAttr))
         sem_rules            : PP_Doc
   alternatives:
      alternative ERule:
         child name           : {Identifier}
         child pattern        : Pattern 
         child rhs            : Expression 
         child owrt           : {Bool}
         child origin         : {String}
         child explicit       : {Bool}
         child pure           : {Bool}
         child mbError        : {Maybe Error}
         visit 0:
            local rulecode    : _
            local pragma      : _
            local endpragma   : _
            local genpragma   : _
            local haspos      : _
            local declHead    : _
            local argPats     : _
            local argExprs    : _
            local stepcode    : _
            local used        : _
            local kinds       : _
            local anyLazyKind : _
-}
-- cata
sem_ERule :: ERule ->
             T_ERule
sem_ERule (ERule _name _pattern _rhs _owrt _origin _explicit _pure _mbError) =
    (sem_ERule_ERule _name (sem_Pattern _pattern) (sem_Expression _rhs) _owrt _origin _explicit _pure _mbError)
-- semantic domain
newtype T_ERule = T_ERule ((Map NontermIdent Attributes) ->
                           (Map NontermIdent Attributes) ->
                           (Map Identifier Type) ->
                           ConstructorIdent ->
                           Attributes ->
                           (Set String) ->
                           (Map Identifier Type) ->
                           String ->
                           String ->
                           NontermIdent ->
                           Options ->
                           (Map Identifier (Set VisitKind)) ->
                           Attributes ->
                           (Map Identifier Int) ->
                           ( (Seq Error),(Map Identifier (VisitKind -> Either Error PP_Doc)),(Map Identifier (Set String)),(Map Identifier (Map String (Maybe NonLocalAttr))),PP_Doc))
data Inh_ERule = Inh_ERule {allInhmap_Inh_ERule :: (Map NontermIdent Attributes),allSynmap_Inh_ERule :: (Map NontermIdent Attributes),childTypes_Inh_ERule :: (Map Identifier Type),con_Inh_ERule :: ConstructorIdent,inhmap_Inh_ERule :: Attributes,lazyIntras_Inh_ERule :: (Set String),localAttrTypes_Inh_ERule :: (Map Identifier Type),mainFile_Inh_ERule :: String,mainName_Inh_ERule :: String,nt_Inh_ERule :: NontermIdent,options_Inh_ERule :: Options,ruleKinds_Inh_ERule :: (Map Identifier (Set VisitKind)),synmap_Inh_ERule :: Attributes,usageInfo_Inh_ERule :: (Map Identifier Int)}
data Syn_ERule = Syn_ERule {errors_Syn_ERule :: (Seq Error),mrules_Syn_ERule :: (Map Identifier (VisitKind -> Either Error PP_Doc)),ruledefs_Syn_ERule :: (Map Identifier (Set String)),ruleuses_Syn_ERule :: (Map Identifier (Map String (Maybe NonLocalAttr))),sem_rules_Syn_ERule :: PP_Doc}
wrap_ERule :: T_ERule ->
              Inh_ERule ->
              Syn_ERule
wrap_ERule (T_ERule sem) (Inh_ERule _lhsIallInhmap _lhsIallSynmap _lhsIchildTypes _lhsIcon _lhsIinhmap _lhsIlazyIntras _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInt _lhsIoptions _lhsIruleKinds _lhsIsynmap _lhsIusageInfo) =
    (let ( _lhsOerrors,_lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules) = sem _lhsIallInhmap _lhsIallSynmap _lhsIchildTypes _lhsIcon _lhsIinhmap _lhsIlazyIntras _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInt _lhsIoptions _lhsIruleKinds _lhsIsynmap _lhsIusageInfo
     in  (Syn_ERule _lhsOerrors _lhsOmrules _lhsOruledefs _lhsOruleuses _lhsOsem_rules))
sem_ERule_ERule :: Identifier ->
                   T_Pattern ->
                   T_Expression ->
                   Bool ->
                   String ->
                   Bool ->
                   Bool ->
                   (Maybe Error) ->
                   T_ERule
sem_ERule_ERule name_ (T_Pattern pattern_) (T_Expression rhs_) owrt_ origin_ explicit_ pure_ mbError_ =
    (T_ERule (\ _lhsIallInhmap
                _lhsIallSynmap
                _lhsIchildTypes
                _lhsIcon
                _lhsIinhmap
                _lhsIlazyIntras
                _lhsIlocalAttrTypes
                _lhsImainFile
                _lhsImainName
                _lhsInt
                _lhsIoptions
                _lhsIruleKinds
                _lhsIsynmap
                _lhsIusageInfo ->
                  (let _lhsOsem_rules :: PP_Doc
                       _lhsOmrules :: (Map Identifier (VisitKind -> Either Error PP_Doc))
                       _lhsOruledefs :: (Map Identifier (Set String))
                       _lhsOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                       _lhsOerrors :: (Seq Error)
                       _patternOallInhmap :: (Map NontermIdent Attributes)
                       _patternOallSynmap :: (Map NontermIdent Attributes)
                       _patternOanyLazyKind :: Bool
                       _patternOinhmap :: Attributes
                       _patternOlocalAttrTypes :: (Map Identifier Type)
                       _patternOoptions :: Options
                       _patternOsynmap :: Attributes
                       _patternIattrTypes :: PP_Doc
                       _patternIattrs :: (Set String)
                       _patternIcopy :: Pattern
                       _patternIextraDefs :: ([(PP_Doc,PP_Doc)])
                       _patternIisUnderscore :: Bool
                       _patternIsem_lhs :: ( PP_Doc )
                       _rhsIattrs :: (Map String (Maybe NonLocalAttr))
                       _rhsIpos :: Pos
                       _rhsIsemfunc :: PP_Doc
                       _rhsItks :: ([HsToken])
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 973, column 6)
                       _lhsOsem_rules =
                           ({-# LINE 973 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            if _used     == 0
                            then empty
                            else _rulecode
                            {-# LINE 3792 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 976, column 6)
                       _rulecode =
                           ({-# LINE 976 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ( if _genpragma
                              then _pragma
                              else empty
                            )
                            >-< _declHead
                            >-< indent ((column _rhsIpos - 2) `max` 2)
                                  ( if _genpragma
                                    then _pragma     >-< _rhsIsemfunc >-< _endpragma
                                    else _rhsIsemfunc
                                  )
                            >#< "in"
                            {-# LINE 3808 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 989, column 7)
                       _pragma =
                           ({-# LINE 989 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppLinePragma _lhsIoptions (line _rhsIpos) (file _rhsIpos)
                            {-# LINE 3814 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 990, column 7)
                       _endpragma =
                           ({-# LINE 990 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppWithLineNr (\ln -> ppLinePragma _lhsIoptions (ln+1) _lhsImainFile)
                            {-# LINE 3820 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 991, column 7)
                       _genpragma =
                           ({-# LINE 991 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            genLinePragmas _lhsIoptions && explicit_ && _haspos
                            {-# LINE 3826 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 992, column 7)
                       _haspos =
                           ({-# LINE 992 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            line _rhsIpos > 0 && column _rhsIpos >= 0 && not (null (file _rhsIpos))
                            {-# LINE 3832 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 996, column 7)
                       _declHead =
                           ({-# LINE 996 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            "let" >#< name_ >#< _argPats     >#< dummyPat _lhsIoptions (Map.null _rhsIattrs) >#< "="
                            {-# LINE 3838 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 997, column 7)
                       _argPats =
                           ({-# LINE 997 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppSpaced
                              [ case mbAttr of
                                  Just (AttrSyn child nm) | child == _LOC && not (noPerStateTypeSigs _lhsIoptions) ->
                                    case Map.lookup nm _lhsIlocalAttrTypes of
                                      Just tp -> pp_parens (strNm >#< ":" >#< ppTp tp)
                                      Nothing -> pp strNm
                                  Just attr | not (noPerStateTypeSigs _lhsIoptions) ->
                                    case lookupAttrType attr _lhsIallInhmap _lhsIallSynmap _lhsIchildTypes of
                                      Just tpDoc -> pp_parens (strNm >#< ":" >#< tpDoc)
                                      Nothing    -> pp strNm
                                  _ -> pp strNm
                              | (strNm, mbAttr) <- Map.assocs _rhsIattrs
                              ]
                            {-# LINE 3856 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1012, column 7)
                       _argExprs =
                           ({-# LINE 1012 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppSpaced $ Map.keys _rhsIattrs
                            {-# LINE 3862 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1013, column 7)
                       _stepcode =
                           ({-# LINE 1013 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            \kind ->
                              let mkBind (pat,expr) = "let" >#< pat >#< "=" >#< expr >#< "in"
                              in if kind `compatibleRule` pure_
                                 then Right $ mkBind (_patternIsem_lhs, name_ >#< _argExprs     >#< dummyArg _lhsIoptions (Map.null _rhsIattrs))
                                              >-< vlist (map mkBind _patternIextraDefs)
                                 else Left $ IncompatibleRuleKind name_ kind
                            {-# LINE 3873 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1020, column 7)
                       _lhsOmrules =
                           ({-# LINE 1020 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton name_ _stepcode
                            {-# LINE 3879 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1222, column 32)
                       _used =
                           ({-# LINE 1222 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.findWithDefault 0 name_ _lhsIusageInfo
                            {-# LINE 3885 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1238, column 3)
                       _kinds =
                           ({-# LINE 1238 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.findWithDefault Set.empty name_ _lhsIruleKinds
                            {-# LINE 3891 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1239, column 3)
                       _anyLazyKind =
                           ({-# LINE 1239 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Set.fold (\k r -> isLazyKind k || r) False _kinds
                            {-# LINE 3897 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1285, column 11)
                       _lhsOruledefs =
                           ({-# LINE 1285 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton name_ _patternIattrs
                            {-# LINE 3903 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1286, column 11)
                       _lhsOruleuses =
                           ({-# LINE 1286 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton name_ _rhsIattrs
                            {-# LINE 3909 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1480, column 3)
                       _lhsOerrors =
                           ({-# LINE 1480 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            case mbError_ of
                              Just e | _used     > 0 -> Seq.singleton e
                              _                      -> Seq.empty
                            {-# LINE 3917 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _patternOallInhmap =
                           ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIallInhmap
                            {-# LINE 3923 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _patternOallSynmap =
                           ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIallSynmap
                            {-# LINE 3929 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (from local)
                       _patternOanyLazyKind =
                           ({-# LINE 1241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _anyLazyKind
                            {-# LINE 3935 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _patternOinhmap =
                           ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIinhmap
                            {-# LINE 3941 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _patternOlocalAttrTypes =
                           ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIlocalAttrTypes
                            {-# LINE 3947 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _patternOoptions =
                           ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIoptions
                            {-# LINE 3953 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _patternOsynmap =
                           ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIsynmap
                            {-# LINE 3959 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       ( _patternIattrTypes,_patternIattrs,_patternIcopy,_patternIextraDefs,_patternIisUnderscore,_patternIsem_lhs) =
                           pattern_ _patternOallInhmap _patternOallSynmap _patternOanyLazyKind _patternOinhmap _patternOlocalAttrTypes _patternOoptions _patternOsynmap
                       ( _rhsIattrs,_rhsIpos,_rhsIsemfunc,_rhsItks) =
                           rhs_
                   in  ( _lhsOerrors,_lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))))
-- ERules ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allInhmap            : Map NontermIdent Attributes
         allSynmap            : Map NontermIdent Attributes
         childTypes           : Map Identifier Type
         con                  : ConstructorIdent
         inhmap               : Attributes
         lazyIntras           : Set String
         localAttrTypes       : Map Identifier Type
         mainFile             : String
         mainName             : String
         nt                   : NontermIdent
         options              : Options
         ruleKinds            : Map Identifier (Set VisitKind)
         synmap               : Attributes
         usageInfo            : Map Identifier Int
      synthesized attributes:
         errors               : Seq Error
         mrules               : Map Identifier (VisitKind -> Either Error PP_Doc)
         ruledefs             : Map Identifier (Set String)
         ruleuses             : Map Identifier (Map String (Maybe NonLocalAttr))
         sem_rules            : PP_Doc
   alternatives:
      alternative Cons:
         child hd             : ERule 
         child tl             : ERules 
      alternative Nil:
-}
-- cata
sem_ERules :: ERules ->
              T_ERules
sem_ERules list =
    (Prelude.foldr sem_ERules_Cons sem_ERules_Nil (Prelude.map sem_ERule list))
-- semantic domain
newtype T_ERules = T_ERules ((Map NontermIdent Attributes) ->
                             (Map NontermIdent Attributes) ->
                             (Map Identifier Type) ->
                             ConstructorIdent ->
                             Attributes ->
                             (Set String) ->
                             (Map Identifier Type) ->
                             String ->
                             String ->
                             NontermIdent ->
                             Options ->
                             (Map Identifier (Set VisitKind)) ->
                             Attributes ->
                             (Map Identifier Int) ->
                             ( (Seq Error),(Map Identifier (VisitKind -> Either Error PP_Doc)),(Map Identifier (Set String)),(Map Identifier (Map String (Maybe NonLocalAttr))),PP_Doc))
data Inh_ERules = Inh_ERules {allInhmap_Inh_ERules :: (Map NontermIdent Attributes),allSynmap_Inh_ERules :: (Map NontermIdent Attributes),childTypes_Inh_ERules :: (Map Identifier Type),con_Inh_ERules :: ConstructorIdent,inhmap_Inh_ERules :: Attributes,lazyIntras_Inh_ERules :: (Set String),localAttrTypes_Inh_ERules :: (Map Identifier Type),mainFile_Inh_ERules :: String,mainName_Inh_ERules :: String,nt_Inh_ERules :: NontermIdent,options_Inh_ERules :: Options,ruleKinds_Inh_ERules :: (Map Identifier (Set VisitKind)),synmap_Inh_ERules :: Attributes,usageInfo_Inh_ERules :: (Map Identifier Int)}
data Syn_ERules = Syn_ERules {errors_Syn_ERules :: (Seq Error),mrules_Syn_ERules :: (Map Identifier (VisitKind -> Either Error PP_Doc)),ruledefs_Syn_ERules :: (Map Identifier (Set String)),ruleuses_Syn_ERules :: (Map Identifier (Map String (Maybe NonLocalAttr))),sem_rules_Syn_ERules :: PP_Doc}
wrap_ERules :: T_ERules ->
               Inh_ERules ->
               Syn_ERules
wrap_ERules (T_ERules sem) (Inh_ERules _lhsIallInhmap _lhsIallSynmap _lhsIchildTypes _lhsIcon _lhsIinhmap _lhsIlazyIntras _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInt _lhsIoptions _lhsIruleKinds _lhsIsynmap _lhsIusageInfo) =
    (let ( _lhsOerrors,_lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules) = sem _lhsIallInhmap _lhsIallSynmap _lhsIchildTypes _lhsIcon _lhsIinhmap _lhsIlazyIntras _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsInt _lhsIoptions _lhsIruleKinds _lhsIsynmap _lhsIusageInfo
     in  (Syn_ERules _lhsOerrors _lhsOmrules _lhsOruledefs _lhsOruleuses _lhsOsem_rules))
sem_ERules_Cons :: T_ERule ->
                   T_ERules ->
                   T_ERules
sem_ERules_Cons (T_ERule hd_) (T_ERules tl_) =
    (T_ERules (\ _lhsIallInhmap
                 _lhsIallSynmap
                 _lhsIchildTypes
                 _lhsIcon
                 _lhsIinhmap
                 _lhsIlazyIntras
                 _lhsIlocalAttrTypes
                 _lhsImainFile
                 _lhsImainName
                 _lhsInt
                 _lhsIoptions
                 _lhsIruleKinds
                 _lhsIsynmap
                 _lhsIusageInfo ->
                   (let _lhsOerrors :: (Seq Error)
                        _lhsOmrules :: (Map Identifier (VisitKind -> Either Error PP_Doc))
                        _lhsOruledefs :: (Map Identifier (Set String))
                        _lhsOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                        _lhsOsem_rules :: PP_Doc
                        _hdOallInhmap :: (Map NontermIdent Attributes)
                        _hdOallSynmap :: (Map NontermIdent Attributes)
                        _hdOchildTypes :: (Map Identifier Type)
                        _hdOcon :: ConstructorIdent
                        _hdOinhmap :: Attributes
                        _hdOlazyIntras :: (Set String)
                        _hdOlocalAttrTypes :: (Map Identifier Type)
                        _hdOmainFile :: String
                        _hdOmainName :: String
                        _hdOnt :: NontermIdent
                        _hdOoptions :: Options
                        _hdOruleKinds :: (Map Identifier (Set VisitKind))
                        _hdOsynmap :: Attributes
                        _hdOusageInfo :: (Map Identifier Int)
                        _tlOallInhmap :: (Map NontermIdent Attributes)
                        _tlOallSynmap :: (Map NontermIdent Attributes)
                        _tlOchildTypes :: (Map Identifier Type)
                        _tlOcon :: ConstructorIdent
                        _tlOinhmap :: Attributes
                        _tlOlazyIntras :: (Set String)
                        _tlOlocalAttrTypes :: (Map Identifier Type)
                        _tlOmainFile :: String
                        _tlOmainName :: String
                        _tlOnt :: NontermIdent
                        _tlOoptions :: Options
                        _tlOruleKinds :: (Map Identifier (Set VisitKind))
                        _tlOsynmap :: Attributes
                        _tlOusageInfo :: (Map Identifier Int)
                        _hdIerrors :: (Seq Error)
                        _hdImrules :: (Map Identifier (VisitKind -> Either Error PP_Doc))
                        _hdIruledefs :: (Map Identifier (Set String))
                        _hdIruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                        _hdIsem_rules :: PP_Doc
                        _tlIerrors :: (Seq Error)
                        _tlImrules :: (Map Identifier (VisitKind -> Either Error PP_Doc))
                        _tlIruledefs :: (Map Identifier (Set String))
                        _tlIruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                        _tlIsem_rules :: PP_Doc
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                        _lhsOerrors =
                            ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIerrors Seq.>< _tlIerrors
                             {-# LINE 4090 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 970, column 32)
                        _lhsOmrules =
                            ({-# LINE 970 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdImrules `Map.union` _tlImrules
                             {-# LINE 4096 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1278, column 34)
                        _lhsOruledefs =
                            ({-# LINE 1278 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIruledefs `uwSetUnion` _tlIruledefs
                             {-# LINE 4102 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1279, column 34)
                        _lhsOruleuses =
                            ({-# LINE 1279 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIruleuses `uwMapUnion` _tlIruleuses
                             {-# LINE 4108 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 969, column 35)
                        _lhsOsem_rules =
                            ({-# LINE 969 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIsem_rules >-< _tlIsem_rules
                             {-# LINE 4114 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallInhmap =
                            ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallInhmap
                             {-# LINE 4120 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallSynmap =
                            ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallSynmap
                             {-# LINE 4126 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOchildTypes =
                            ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIchildTypes
                             {-# LINE 4132 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOcon =
                            ({-# LINE 86 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIcon
                             {-# LINE 4138 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOinhmap =
                            ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIinhmap
                             {-# LINE 4144 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOlazyIntras =
                            ({-# LINE 1330 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIlazyIntras
                             {-# LINE 4150 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOlocalAttrTypes =
                            ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIlocalAttrTypes
                             {-# LINE 4156 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOmainFile =
                            ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsImainFile
                             {-# LINE 4162 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOmainName =
                            ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsImainName
                             {-# LINE 4168 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOnt =
                            ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsInt
                             {-# LINE 4174 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOoptions =
                            ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIoptions
                             {-# LINE 4180 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOruleKinds =
                            ({-# LINE 1233 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIruleKinds
                             {-# LINE 4186 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOsynmap =
                            ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIsynmap
                             {-# LINE 4192 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOusageInfo =
                            ({-# LINE 1218 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIusageInfo
                             {-# LINE 4198 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallInhmap =
                            ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallInhmap
                             {-# LINE 4204 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallSynmap =
                            ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallSynmap
                             {-# LINE 4210 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOchildTypes =
                            ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIchildTypes
                             {-# LINE 4216 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOcon =
                            ({-# LINE 86 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIcon
                             {-# LINE 4222 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOinhmap =
                            ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIinhmap
                             {-# LINE 4228 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOlazyIntras =
                            ({-# LINE 1330 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIlazyIntras
                             {-# LINE 4234 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOlocalAttrTypes =
                            ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIlocalAttrTypes
                             {-# LINE 4240 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOmainFile =
                            ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsImainFile
                             {-# LINE 4246 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOmainName =
                            ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsImainName
                             {-# LINE 4252 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOnt =
                            ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsInt
                             {-# LINE 4258 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOoptions =
                            ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIoptions
                             {-# LINE 4264 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOruleKinds =
                            ({-# LINE 1233 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIruleKinds
                             {-# LINE 4270 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOsynmap =
                            ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIsynmap
                             {-# LINE 4276 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOusageInfo =
                            ({-# LINE 1218 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIusageInfo
                             {-# LINE 4282 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        ( _hdIerrors,_hdImrules,_hdIruledefs,_hdIruleuses,_hdIsem_rules) =
                            hd_ _hdOallInhmap _hdOallSynmap _hdOchildTypes _hdOcon _hdOinhmap _hdOlazyIntras _hdOlocalAttrTypes _hdOmainFile _hdOmainName _hdOnt _hdOoptions _hdOruleKinds _hdOsynmap _hdOusageInfo
                        ( _tlIerrors,_tlImrules,_tlIruledefs,_tlIruleuses,_tlIsem_rules) =
                            tl_ _tlOallInhmap _tlOallSynmap _tlOchildTypes _tlOcon _tlOinhmap _tlOlazyIntras _tlOlocalAttrTypes _tlOmainFile _tlOmainName _tlOnt _tlOoptions _tlOruleKinds _tlOsynmap _tlOusageInfo
                    in  ( _lhsOerrors,_lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))))
sem_ERules_Nil :: T_ERules
sem_ERules_Nil =
    (T_ERules (\ _lhsIallInhmap
                 _lhsIallSynmap
                 _lhsIchildTypes
                 _lhsIcon
                 _lhsIinhmap
                 _lhsIlazyIntras
                 _lhsIlocalAttrTypes
                 _lhsImainFile
                 _lhsImainName
                 _lhsInt
                 _lhsIoptions
                 _lhsIruleKinds
                 _lhsIsynmap
                 _lhsIusageInfo ->
                   (let _lhsOerrors :: (Seq Error)
                        _lhsOmrules :: (Map Identifier (VisitKind -> Either Error PP_Doc))
                        _lhsOruledefs :: (Map Identifier (Set String))
                        _lhsOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                        _lhsOsem_rules :: PP_Doc
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                        _lhsOerrors =
                            ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Seq.empty
                             {-# LINE 4314 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 970, column 32)
                        _lhsOmrules =
                            ({-# LINE 970 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 4320 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1278, column 34)
                        _lhsOruledefs =
                            ({-# LINE 1278 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 4326 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1279, column 34)
                        _lhsOruleuses =
                            ({-# LINE 1279 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 4332 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 969, column 35)
                        _lhsOsem_rules =
                            ({-# LINE 969 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             empty
                             {-# LINE 4338 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                    in  ( _lhsOerrors,_lhsOmrules,_lhsOruledefs,_lhsOruleuses,_lhsOsem_rules))))
-- ExecutionPlan -----------------------------------------------
{-
   visit 0:
      inherited attributes:
         inhmap               : Map NontermIdent Attributes
         localAttrTypes       : Map NontermIdent (Map ConstructorIdent (Map Identifier Type))
         mainFile             : String
         mainName             : String
         options              : Options
         synmap               : Map NontermIdent Attributes
      synthesized attributes:
         code                 : PP_Doc
         datas                : PP_Doc
         errors               : Seq Error
         modules              : PP_Doc
   alternatives:
      alternative ExecutionPlan:
         child nonts          : ENonterminals 
         child typeSyns       : {TypeSyns}
         child wrappers       : {Set NontermIdent}
         child derivings      : {Derivings}
         visit 0:
            local wrappersExtra : _
            local commonExtra : _
            local lateSemBndTp : _
            local lateSemBndDef : _
-}
-- cata
sem_ExecutionPlan :: ExecutionPlan ->
                     T_ExecutionPlan
sem_ExecutionPlan (ExecutionPlan _nonts _typeSyns _wrappers _derivings) =
    (sem_ExecutionPlan_ExecutionPlan (sem_ENonterminals _nonts) _typeSyns _wrappers _derivings)
-- semantic domain
newtype T_ExecutionPlan = T_ExecutionPlan ((Map NontermIdent Attributes) ->
                                           (Map NontermIdent (Map ConstructorIdent (Map Identifier Type))) ->
                                           String ->
                                           String ->
                                           Options ->
                                           (Map NontermIdent Attributes) ->
                                           ( PP_Doc,PP_Doc,(Seq Error),PP_Doc))
data Inh_ExecutionPlan = Inh_ExecutionPlan {inhmap_Inh_ExecutionPlan :: (Map NontermIdent Attributes),localAttrTypes_Inh_ExecutionPlan :: (Map NontermIdent (Map ConstructorIdent (Map Identifier Type))),mainFile_Inh_ExecutionPlan :: String,mainName_Inh_ExecutionPlan :: String,options_Inh_ExecutionPlan :: Options,synmap_Inh_ExecutionPlan :: (Map NontermIdent Attributes)}
data Syn_ExecutionPlan = Syn_ExecutionPlan {code_Syn_ExecutionPlan :: PP_Doc,datas_Syn_ExecutionPlan :: PP_Doc,errors_Syn_ExecutionPlan :: (Seq Error),modules_Syn_ExecutionPlan :: PP_Doc}
wrap_ExecutionPlan :: T_ExecutionPlan ->
                      Inh_ExecutionPlan ->
                      Syn_ExecutionPlan
wrap_ExecutionPlan (T_ExecutionPlan sem) (Inh_ExecutionPlan _lhsIinhmap _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsIoptions _lhsIsynmap) =
    (let ( _lhsOcode,_lhsOdatas,_lhsOerrors,_lhsOmodules) = sem _lhsIinhmap _lhsIlocalAttrTypes _lhsImainFile _lhsImainName _lhsIoptions _lhsIsynmap
     in  (Syn_ExecutionPlan _lhsOcode _lhsOdatas _lhsOerrors _lhsOmodules))
sem_ExecutionPlan_ExecutionPlan :: T_ENonterminals ->
                                   TypeSyns ->
                                   (Set NontermIdent) ->
                                   Derivings ->
                                   T_ExecutionPlan
sem_ExecutionPlan_ExecutionPlan (T_ENonterminals nonts_) typeSyns_ wrappers_ derivings_ =
    (T_ExecutionPlan (\ _lhsIinhmap
                        _lhsIlocalAttrTypes
                        _lhsImainFile
                        _lhsImainName
                        _lhsIoptions
                        _lhsIsynmap ->
                          (let _lhsOcode :: PP_Doc
                               _lhsOdatas :: PP_Doc
                               _nontsOwrappers :: (Set NontermIdent)
                               _nontsOtypeSyns :: TypeSyns
                               _nontsOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _nontsOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _nontsOavisituses :: (Map VisitIdentifier (Set Identifier))
                               _nontsOallFromToStates :: (Map VisitIdentifier (Int,Int))
                               _nontsOallVisitKinds :: (Map VisitIdentifier VisitKind)
                               _nontsOallInitStates :: (Map NontermIdent Int)
                               _lhsOerrors :: (Seq Error)
                               _lhsOmodules :: PP_Doc
                               _nontsOinhmap :: (Map NontermIdent Attributes)
                               _nontsOlocalAttrTypes :: (Map NontermIdent (Map ConstructorIdent (Map Identifier Type)))
                               _nontsOmainFile :: String
                               _nontsOmainName :: String
                               _nontsOoptions :: Options
                               _nontsOsynmap :: (Map NontermIdent Attributes)
                               _nontsIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                               _nontsIcode :: PP_Doc
                               _nontsIdatas :: PP_Doc
                               _nontsIerrors :: (Seq Error)
                               _nontsIfromToStates :: (Map VisitIdentifier (Int,Int))
                               _nontsIinitStates :: (Map NontermIdent Int)
                               _nontsImodules :: PP_Doc
                               _nontsIsemFunBndDefs :: (Seq PP_Doc)
                               _nontsIsemFunBndTps :: (Seq PP_Doc)
                               _nontsIvisitKinds :: (Map VisitIdentifier VisitKind)
                               _nontsIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                               _nontsIvisituses :: (Map VisitIdentifier (Set Identifier))
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 103, column 3)
                               _lhsOcode =
                                   ({-# LINE 103 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIcode  >-< _wrappersExtra
                                    {-# LINE 4435 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 104, column 3)
                               _lhsOdatas =
                                   ({-# LINE 104 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIdatas >-< _commonExtra
                                    {-# LINE 4441 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 110, column 3)
                               _nontsOwrappers =
                                   ({-# LINE 110 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    wrappers_
                                    {-# LINE 4447 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 171, column 3)
                               _nontsOtypeSyns =
                                   ({-# LINE 171 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    typeSyns_
                                    {-# LINE 4453 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 659, column 3)
                               _wrappersExtra =
                                   ({-# LINE 659 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    if lateHigherOrderBinding _lhsIoptions
                                    then _lateSemBndDef
                                    else empty
                                    {-# LINE 4461 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 662, column 3)
                               _commonExtra =
                                   ({-# LINE 662 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    if lateHigherOrderBinding _lhsIoptions
                                    then _lateSemBndTp
                                    else empty
                                    {-# LINE 4469 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 665, column 3)
                               _lateSemBndTp =
                                   ({-# LINE 665 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    "and" >#< lateBindingTypeNm _lhsImainName >#< "=" >#< ppRecordTp (toList _nontsIsemFunBndTps)
                                    {-# LINE 4475 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 666, column 3)
                               _lateSemBndDef =
                                   ({-# LINE 666 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    "and" >#< lateBindingFieldNm _lhsImainName >#< ":" >#< lateBindingTypeNm _lhsImainName >#< "="
                                    >-< (indent 2 $ ppRecordVal $ toList _nontsIsemFunBndDefs)
                                    {-# LINE 4482 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 1152, column 19)
                               _nontsOallchildvisit =
                                   ({-# LINE 1152 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIchildvisit
                                    {-# LINE 4488 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 1310, column 19)
                               _nontsOavisitdefs =
                                   ({-# LINE 1310 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIvisitdefs
                                    {-# LINE 4494 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 1311, column 19)
                               _nontsOavisituses =
                                   ({-# LINE 1311 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIvisituses
                                    {-# LINE 4500 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 1402, column 3)
                               _nontsOallFromToStates =
                                   ({-# LINE 1402 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIfromToStates
                                    {-# LINE 4506 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 1446, column 3)
                               _nontsOallVisitKinds =
                                   ({-# LINE 1446 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIvisitKinds
                                    {-# LINE 4512 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- "./src-ag/ExecutionPlan2Caml.ag"(line 1460, column 3)
                               _nontsOallInitStates =
                                   ({-# LINE 1460 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIinitStates
                                    {-# LINE 4518 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                               _lhsOerrors =
                                   ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsIerrors
                                    {-# LINE 4524 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (up)
                               _lhsOmodules =
                                   ({-# LINE 100 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _nontsImodules
                                    {-# LINE 4530 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOinhmap =
                                   ({-# LINE 403 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIinhmap
                                    {-# LINE 4536 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOlocalAttrTypes =
                                   ({-# LINE 1425 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIlocalAttrTypes
                                    {-# LINE 4542 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOmainFile =
                                   ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsImainFile
                                    {-# LINE 4548 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOmainName =
                                   ({-# LINE 60 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsImainName
                                    {-# LINE 4554 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOoptions =
                                   ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIoptions
                                    {-# LINE 4560 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               -- copy rule (down)
                               _nontsOsynmap =
                                   ({-# LINE 404 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                    _lhsIsynmap
                                    {-# LINE 4566 "dist/build/ExecutionPlan2Caml.hs" #-}
                                    )
                               ( _nontsIchildvisit,_nontsIcode,_nontsIdatas,_nontsIerrors,_nontsIfromToStates,_nontsIinitStates,_nontsImodules,_nontsIsemFunBndDefs,_nontsIsemFunBndTps,_nontsIvisitKinds,_nontsIvisitdefs,_nontsIvisituses) =
                                   nonts_ _nontsOallFromToStates _nontsOallInitStates _nontsOallVisitKinds _nontsOallchildvisit _nontsOavisitdefs _nontsOavisituses _nontsOinhmap _nontsOlocalAttrTypes _nontsOmainFile _nontsOmainName _nontsOoptions _nontsOsynmap _nontsOtypeSyns _nontsOwrappers
                           in  ( _lhsOcode,_lhsOdatas,_lhsOerrors,_lhsOmodules))))
-- Expression --------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         attrs                : Map String (Maybe NonLocalAttr)
         pos                  : Pos
         semfunc              : PP_Doc
         tks                  : [HsToken]
   alternatives:
      alternative Expression:
         child pos            : {Pos}
         child tks            : {[HsToken]}
-}
-- cata
sem_Expression :: Expression ->
                  T_Expression
sem_Expression (Expression _pos _tks) =
    (sem_Expression_Expression _pos _tks)
-- semantic domain
newtype T_Expression = T_Expression (( (Map String (Maybe NonLocalAttr)),Pos,PP_Doc,([HsToken])))
data Inh_Expression = Inh_Expression {}
data Syn_Expression = Syn_Expression {attrs_Syn_Expression :: (Map String (Maybe NonLocalAttr)),pos_Syn_Expression :: Pos,semfunc_Syn_Expression :: PP_Doc,tks_Syn_Expression :: ([HsToken])}
wrap_Expression :: T_Expression ->
                   Inh_Expression ->
                   Syn_Expression
wrap_Expression (T_Expression sem) (Inh_Expression) =
    (let ( _lhsOattrs,_lhsOpos,_lhsOsemfunc,_lhsOtks) = sem
     in  (Syn_Expression _lhsOattrs _lhsOpos _lhsOsemfunc _lhsOtks))
sem_Expression_Expression :: Pos ->
                             ([HsToken]) ->
                             T_Expression
sem_Expression_Expression pos_ tks_ =
    (T_Expression (let _lhsOtks :: ([HsToken])
                       _lhsOpos :: Pos
                       _lhsOattrs :: (Map String (Maybe NonLocalAttr))
                       _lhsOsemfunc :: PP_Doc
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1024, column 16)
                       _lhsOtks =
                           ({-# LINE 1024 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            tks_
                            {-# LINE 4611 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1045, column 29)
                       _lhsOpos =
                           ({-# LINE 1045 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            pos_
                            {-# LINE 4617 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1137, column 16)
                       _lhsOattrs =
                           ({-# LINE 1137 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.unions $ map (\tok -> attrs_Syn_HsToken (wrap_HsToken (sem_HsToken tok) Inh_HsToken)) tks_
                            {-# LINE 4623 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1138, column 16)
                       _lhsOsemfunc =
                           ({-# LINE 1138 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            vlist $ showTokens $ map (\tok -> tok_Syn_HsToken (wrap_HsToken (sem_HsToken tok) Inh_HsToken)) tks_
                            {-# LINE 4629 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                   in  ( _lhsOattrs,_lhsOpos,_lhsOsemfunc,_lhsOtks)))
-- HsToken -----------------------------------------------------
{-
   visit 0:
      synthesized attributes:
         attrs                : Map String (Maybe NonLocalAttr)
         tok                  : (Pos,String)
   alternatives:
      alternative AGLocal:
         child var            : {Identifier}
         child pos            : {Pos}
         child rdesc          : {Maybe String}
         visit 0:
            local tok         : _
      alternative AGField:
         child field          : {Identifier}
         child attr           : {Identifier}
         child pos            : {Pos}
         child rdesc          : {Maybe String}
         visit 0:
            local mbAttr      : _
            local addTrace    : _
      alternative HsToken:
         child value          : {String}
         child pos            : {Pos}
      alternative CharToken:
         child value          : {String}
         child pos            : {Pos}
      alternative StrToken:
         child value          : {String}
         child pos            : {Pos}
      alternative Err:
         child mesg           : {String}
         child pos            : {Pos}
-}
-- cata
sem_HsToken :: HsToken ->
               T_HsToken
sem_HsToken (AGLocal _var _pos _rdesc) =
    (sem_HsToken_AGLocal _var _pos _rdesc)
sem_HsToken (AGField _field _attr _pos _rdesc) =
    (sem_HsToken_AGField _field _attr _pos _rdesc)
sem_HsToken (HsToken _value _pos) =
    (sem_HsToken_HsToken _value _pos)
sem_HsToken (CharToken _value _pos) =
    (sem_HsToken_CharToken _value _pos)
sem_HsToken (StrToken _value _pos) =
    (sem_HsToken_StrToken _value _pos)
sem_HsToken (Err _mesg _pos) =
    (sem_HsToken_Err _mesg _pos)
-- semantic domain
newtype T_HsToken = T_HsToken (( (Map String (Maybe NonLocalAttr)),((Pos,String))))
data Inh_HsToken = Inh_HsToken {}
data Syn_HsToken = Syn_HsToken {attrs_Syn_HsToken :: (Map String (Maybe NonLocalAttr)),tok_Syn_HsToken :: ((Pos,String))}
wrap_HsToken :: T_HsToken ->
                Inh_HsToken ->
                Syn_HsToken
wrap_HsToken (T_HsToken sem) (Inh_HsToken) =
    (let ( _lhsOattrs,_lhsOtok) = sem
     in  (Syn_HsToken _lhsOattrs _lhsOtok))
sem_HsToken_AGLocal :: Identifier ->
                       Pos ->
                       (Maybe String) ->
                       T_HsToken
sem_HsToken_AGLocal var_ pos_ rdesc_ =
    (T_HsToken (let _lhsOattrs :: (Map String (Maybe NonLocalAttr))
                    _lhsOtok :: ((Pos,String))
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1096, column 15)
                    _lhsOattrs =
                        ({-# LINE 1096 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         Map.singleton (fieldname var_) Nothing
                         {-# LINE 4702 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1358, column 15)
                    _tok =
                        ({-# LINE 1358 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         (pos_,fieldname var_)
                         {-# LINE 4708 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- copy rule (from local)
                    _lhsOtok =
                        ({-# LINE 1360 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         _tok
                         {-# LINE 4714 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                in  ( _lhsOattrs,_lhsOtok)))
sem_HsToken_AGField :: Identifier ->
                       Identifier ->
                       Pos ->
                       (Maybe String) ->
                       T_HsToken
sem_HsToken_AGField field_ attr_ pos_ rdesc_ =
    (T_HsToken (let _lhsOattrs :: (Map String (Maybe NonLocalAttr))
                    _lhsOtok :: ((Pos,String))
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1097, column 15)
                    _mbAttr =
                        ({-# LINE 1097 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         if field_ == _INST || field_ == _FIELD || field_ == _INST'
                         then Nothing
                         else Just $ mkNonLocalAttr (field_ == _LHS) field_ attr_
                         {-# LINE 4731 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1100, column 15)
                    _lhsOattrs =
                        ({-# LINE 1100 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         Map.singleton (attrname True field_ attr_) _mbAttr
                         {-# LINE 4737 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1362, column 8)
                    _addTrace =
                        ({-# LINE 1362 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         case rdesc_ of
                           Just d  -> \x -> "(prerr_endline " ++ show (d ++ " -> " ++ show field_ ++ "." ++ show attr_) ++ "; " ++ x ++ ")"
                           Nothing -> id
                         {-# LINE 4745 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1365, column 8)
                    _lhsOtok =
                        ({-# LINE 1365 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         (pos_, _addTrace     $ attrname True field_ attr_)
                         {-# LINE 4751 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                in  ( _lhsOattrs,_lhsOtok)))
sem_HsToken_HsToken :: String ->
                       Pos ->
                       T_HsToken
sem_HsToken_HsToken value_ pos_ =
    (T_HsToken (let _lhsOtok :: ((Pos,String))
                    _lhsOattrs :: (Map String (Maybe NonLocalAttr))
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1367, column 14)
                    _lhsOtok =
                        ({-# LINE 1367 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         (pos_, value_)
                         {-# LINE 4764 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1094, column 37)
                    _lhsOattrs =
                        ({-# LINE 1094 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         Map.empty
                         {-# LINE 4770 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                in  ( _lhsOattrs,_lhsOtok)))
sem_HsToken_CharToken :: String ->
                         Pos ->
                         T_HsToken
sem_HsToken_CharToken value_ pos_ =
    (T_HsToken (let _lhsOtok :: ((Pos,String))
                    _lhsOattrs :: (Map String (Maybe NonLocalAttr))
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1369, column 16)
                    _lhsOtok =
                        ({-# LINE 1369 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         (pos_, if null value_
                                   then ""
                                   else showCharShort (head value_)
                         )
                         {-# LINE 4786 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1094, column 37)
                    _lhsOattrs =
                        ({-# LINE 1094 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         Map.empty
                         {-# LINE 4792 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                in  ( _lhsOattrs,_lhsOtok)))
sem_HsToken_StrToken :: String ->
                        Pos ->
                        T_HsToken
sem_HsToken_StrToken value_ pos_ =
    (T_HsToken (let _lhsOtok :: ((Pos,String))
                    _lhsOattrs :: (Map String (Maybe NonLocalAttr))
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1374, column 16)
                    _lhsOtok =
                        ({-# LINE 1374 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         (pos_, showStrShort value_)
                         {-# LINE 4805 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1094, column 37)
                    _lhsOattrs =
                        ({-# LINE 1094 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         Map.empty
                         {-# LINE 4811 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                in  ( _lhsOattrs,_lhsOtok)))
sem_HsToken_Err :: String ->
                   Pos ->
                   T_HsToken
sem_HsToken_Err mesg_ pos_ =
    (T_HsToken (let _lhsOtok :: ((Pos,String))
                    _lhsOattrs :: (Map String (Maybe NonLocalAttr))
                    -- "./src-ag/ExecutionPlan2Caml.ag"(line 1375, column 16)
                    _lhsOtok =
                        ({-# LINE 1375 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         (pos_, "")
                         {-# LINE 4824 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                    -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1094, column 37)
                    _lhsOattrs =
                        ({-# LINE 1094 "./src-ag/ExecutionPlan2Caml.ag" #-}
                         Map.empty
                         {-# LINE 4830 "dist/build/ExecutionPlan2Caml.hs" #-}
                         )
                in  ( _lhsOattrs,_lhsOtok)))
-- HsTokens ----------------------------------------------------
{-
   visit 0:
      synthesized attribute:
         tks                  : [(Pos,String)]
   alternatives:
      alternative Cons:
         child hd             : HsToken 
         child tl             : HsTokens 
      alternative Nil:
-}
-- cata
sem_HsTokens :: HsTokens ->
                T_HsTokens
sem_HsTokens list =
    (Prelude.foldr sem_HsTokens_Cons sem_HsTokens_Nil (Prelude.map sem_HsToken list))
-- semantic domain
newtype T_HsTokens = T_HsTokens (( ([(Pos,String)])))
data Inh_HsTokens = Inh_HsTokens {}
data Syn_HsTokens = Syn_HsTokens {tks_Syn_HsTokens :: ([(Pos,String)])}
wrap_HsTokens :: T_HsTokens ->
                 Inh_HsTokens ->
                 Syn_HsTokens
wrap_HsTokens (T_HsTokens sem) (Inh_HsTokens) =
    (let ( _lhsOtks) = sem
     in  (Syn_HsTokens _lhsOtks))
sem_HsTokens_Cons :: T_HsToken ->
                     T_HsTokens ->
                     T_HsTokens
sem_HsTokens_Cons (T_HsToken hd_) (T_HsTokens tl_) =
    (T_HsTokens (let _lhsOtks :: ([(Pos,String)])
                     _hdIattrs :: (Map String (Maybe NonLocalAttr))
                     _hdItok :: ((Pos,String))
                     _tlItks :: ([(Pos,String)])
                     -- "./src-ag/ExecutionPlan2Caml.ag"(line 1354, column 10)
                     _lhsOtks =
                         ({-# LINE 1354 "./src-ag/ExecutionPlan2Caml.ag" #-}
                          _hdItok : _tlItks
                          {-# LINE 4871 "dist/build/ExecutionPlan2Caml.hs" #-}
                          )
                     ( _hdIattrs,_hdItok) =
                         hd_
                     ( _tlItks) =
                         tl_
                 in  ( _lhsOtks)))
sem_HsTokens_Nil :: T_HsTokens
sem_HsTokens_Nil =
    (T_HsTokens (let _lhsOtks :: ([(Pos,String)])
                     -- "./src-ag/ExecutionPlan2Caml.ag"(line 1355, column 10)
                     _lhsOtks =
                         ({-# LINE 1355 "./src-ag/ExecutionPlan2Caml.ag" #-}
                          []
                          {-# LINE 4885 "dist/build/ExecutionPlan2Caml.hs" #-}
                          )
                 in  ( _lhsOtks)))
-- HsTokensRoot ------------------------------------------------
{-
   alternatives:
      alternative HsTokensRoot:
         child tokens         : HsTokens 
-}
-- cata
sem_HsTokensRoot :: HsTokensRoot ->
                    T_HsTokensRoot
sem_HsTokensRoot (HsTokensRoot _tokens) =
    (sem_HsTokensRoot_HsTokensRoot (sem_HsTokens _tokens))
-- semantic domain
newtype T_HsTokensRoot = T_HsTokensRoot (( ))
data Inh_HsTokensRoot = Inh_HsTokensRoot {}
data Syn_HsTokensRoot = Syn_HsTokensRoot {}
wrap_HsTokensRoot :: T_HsTokensRoot ->
                     Inh_HsTokensRoot ->
                     Syn_HsTokensRoot
wrap_HsTokensRoot (T_HsTokensRoot sem) (Inh_HsTokensRoot) =
    (let ( ) = sem
     in  (Syn_HsTokensRoot))
sem_HsTokensRoot_HsTokensRoot :: T_HsTokens ->
                                 T_HsTokensRoot
sem_HsTokensRoot_HsTokensRoot (T_HsTokens tokens_) =
    (T_HsTokensRoot (let _tokensItks :: ([(Pos,String)])
                         ( _tokensItks) =
                             tokens_
                     in  ( )))
-- Pattern -----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allInhmap            : Map NontermIdent Attributes
         allSynmap            : Map NontermIdent Attributes
         anyLazyKind          : Bool
         inhmap               : Attributes
         localAttrTypes       : Map Identifier Type
         options              : Options
         synmap               : Attributes
      synthesized attributes:
         attrTypes            : PP_Doc
         attrs                : Set String
         copy                 : Pattern 
         extraDefs            : [(PP_Doc,PP_Doc)]
         isUnderscore         : Bool
         sem_lhs              :  PP_Doc 
   alternatives:
      alternative Constr:
         child name           : {ConstructorIdent}
         child pats           : Patterns 
         visit 0:
            local copy        : _
      alternative Product:
         child pos            : {Pos}
         child pats           : Patterns 
         visit 0:
            local copy        : _
      alternative Alias:
         child field          : {Identifier}
         child attr           : {Identifier}
         child pat            : Pattern 
         visit 0:
            local var         : _
            local hasTp       : _
            local o_sigs      : _
            local mbTp        : _
            local copy        : _
      alternative Irrefutable:
         child pat            : Pattern 
         visit 0:
            local copy        : _
      alternative Underscore:
         child pos            : {Pos}
         visit 0:
            local copy        : _
-}
-- cata
sem_Pattern :: Pattern ->
               T_Pattern
sem_Pattern (Constr _name _pats) =
    (sem_Pattern_Constr _name (sem_Patterns _pats))
sem_Pattern (Product _pos _pats) =
    (sem_Pattern_Product _pos (sem_Patterns _pats))
sem_Pattern (Alias _field _attr _pat) =
    (sem_Pattern_Alias _field _attr (sem_Pattern _pat))
sem_Pattern (Irrefutable _pat) =
    (sem_Pattern_Irrefutable (sem_Pattern _pat))
sem_Pattern (Underscore _pos) =
    (sem_Pattern_Underscore _pos)
-- semantic domain
newtype T_Pattern = T_Pattern ((Map NontermIdent Attributes) ->
                               (Map NontermIdent Attributes) ->
                               Bool ->
                               Attributes ->
                               (Map Identifier Type) ->
                               Options ->
                               Attributes ->
                               ( PP_Doc,(Set String),Pattern,([(PP_Doc,PP_Doc)]),Bool,( PP_Doc )))
data Inh_Pattern = Inh_Pattern {allInhmap_Inh_Pattern :: (Map NontermIdent Attributes),allSynmap_Inh_Pattern :: (Map NontermIdent Attributes),anyLazyKind_Inh_Pattern :: Bool,inhmap_Inh_Pattern :: Attributes,localAttrTypes_Inh_Pattern :: (Map Identifier Type),options_Inh_Pattern :: Options,synmap_Inh_Pattern :: Attributes}
data Syn_Pattern = Syn_Pattern {attrTypes_Syn_Pattern :: PP_Doc,attrs_Syn_Pattern :: (Set String),copy_Syn_Pattern :: Pattern,extraDefs_Syn_Pattern :: ([(PP_Doc,PP_Doc)]),isUnderscore_Syn_Pattern :: Bool,sem_lhs_Syn_Pattern :: ( PP_Doc )}
wrap_Pattern :: T_Pattern ->
                Inh_Pattern ->
                Syn_Pattern
wrap_Pattern (T_Pattern sem) (Inh_Pattern _lhsIallInhmap _lhsIallSynmap _lhsIanyLazyKind _lhsIinhmap _lhsIlocalAttrTypes _lhsIoptions _lhsIsynmap) =
    (let ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOisUnderscore,_lhsOsem_lhs) = sem _lhsIallInhmap _lhsIallSynmap _lhsIanyLazyKind _lhsIinhmap _lhsIlocalAttrTypes _lhsIoptions _lhsIsynmap
     in  (Syn_Pattern _lhsOattrTypes _lhsOattrs _lhsOcopy _lhsOextraDefs _lhsOisUnderscore _lhsOsem_lhs))
sem_Pattern_Constr :: ConstructorIdent ->
                      T_Patterns ->
                      T_Pattern
sem_Pattern_Constr name_ (T_Patterns pats_) =
    (T_Pattern (\ _lhsIallInhmap
                  _lhsIallSynmap
                  _lhsIanyLazyKind
                  _lhsIinhmap
                  _lhsIlocalAttrTypes
                  _lhsIoptions
                  _lhsIsynmap ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _lhsOisUnderscore :: Bool
                         _lhsOattrTypes :: PP_Doc
                         _lhsOattrs :: (Set String)
                         _lhsOextraDefs :: ([(PP_Doc,PP_Doc)])
                         _lhsOcopy :: Pattern
                         _patsOallInhmap :: (Map NontermIdent Attributes)
                         _patsOallSynmap :: (Map NontermIdent Attributes)
                         _patsOanyLazyKind :: Bool
                         _patsOinhmap :: Attributes
                         _patsOlocalAttrTypes :: (Map Identifier Type)
                         _patsOoptions :: Options
                         _patsOsynmap :: Attributes
                         _patsIattrTypes :: PP_Doc
                         _patsIattrs :: (Set String)
                         _patsIcopy :: Patterns
                         _patsIextraDefs :: ([(PP_Doc,PP_Doc)])
                         _patsIsem_lhs :: ([PP_Doc])
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1062, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 1062 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              pp_parens $ name_ >#< pp_block "(" ")" "," _patsIsem_lhs
                              {-# LINE 5027 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1071, column 16)
                         _lhsOisUnderscore =
                             ({-# LINE 1071 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              False
                              {-# LINE 5033 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1083, column 40)
                         _lhsOattrTypes =
                             ({-# LINE 1083 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patsIattrTypes
                              {-# LINE 5039 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1077, column 36)
                         _lhsOattrs =
                             ({-# LINE 1077 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patsIattrs
                              {-# LINE 5045 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1050, column 39)
                         _lhsOextraDefs =
                             ({-# LINE 1050 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patsIextraDefs
                              {-# LINE 5051 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              Constr name_ _patsIcopy
                              {-# LINE 5057 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 5063 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOallInhmap =
                             ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallInhmap
                              {-# LINE 5069 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOallSynmap =
                             ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallSynmap
                              {-# LINE 5075 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOanyLazyKind =
                             ({-# LINE 1241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIanyLazyKind
                              {-# LINE 5081 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOinhmap =
                             ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIinhmap
                              {-# LINE 5087 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOlocalAttrTypes =
                             ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIlocalAttrTypes
                              {-# LINE 5093 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOoptions =
                             ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIoptions
                              {-# LINE 5099 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOsynmap =
                             ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIsynmap
                              {-# LINE 5105 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         ( _patsIattrTypes,_patsIattrs,_patsIcopy,_patsIextraDefs,_patsIsem_lhs) =
                             pats_ _patsOallInhmap _patsOallSynmap _patsOanyLazyKind _patsOinhmap _patsOlocalAttrTypes _patsOoptions _patsOsynmap
                     in  ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOisUnderscore,_lhsOsem_lhs))))
sem_Pattern_Product :: Pos ->
                       T_Patterns ->
                       T_Pattern
sem_Pattern_Product pos_ (T_Patterns pats_) =
    (T_Pattern (\ _lhsIallInhmap
                  _lhsIallSynmap
                  _lhsIanyLazyKind
                  _lhsIinhmap
                  _lhsIlocalAttrTypes
                  _lhsIoptions
                  _lhsIsynmap ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _lhsOisUnderscore :: Bool
                         _lhsOattrTypes :: PP_Doc
                         _lhsOattrs :: (Set String)
                         _lhsOextraDefs :: ([(PP_Doc,PP_Doc)])
                         _lhsOcopy :: Pattern
                         _patsOallInhmap :: (Map NontermIdent Attributes)
                         _patsOallSynmap :: (Map NontermIdent Attributes)
                         _patsOanyLazyKind :: Bool
                         _patsOinhmap :: Attributes
                         _patsOlocalAttrTypes :: (Map Identifier Type)
                         _patsOoptions :: Options
                         _patsOsynmap :: Attributes
                         _patsIattrTypes :: PP_Doc
                         _patsIattrs :: (Set String)
                         _patsIcopy :: Patterns
                         _patsIextraDefs :: ([(PP_Doc,PP_Doc)])
                         _patsIsem_lhs :: ([PP_Doc])
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1061, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 1061 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              pp_block "(" ")" "," _patsIsem_lhs
                              {-# LINE 5143 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1072, column 16)
                         _lhsOisUnderscore =
                             ({-# LINE 1072 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              False
                              {-# LINE 5149 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1083, column 40)
                         _lhsOattrTypes =
                             ({-# LINE 1083 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patsIattrTypes
                              {-# LINE 5155 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1077, column 36)
                         _lhsOattrs =
                             ({-# LINE 1077 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patsIattrs
                              {-# LINE 5161 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1050, column 39)
                         _lhsOextraDefs =
                             ({-# LINE 1050 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patsIextraDefs
                              {-# LINE 5167 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              Product pos_ _patsIcopy
                              {-# LINE 5173 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 5179 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOallInhmap =
                             ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallInhmap
                              {-# LINE 5185 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOallSynmap =
                             ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallSynmap
                              {-# LINE 5191 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOanyLazyKind =
                             ({-# LINE 1241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIanyLazyKind
                              {-# LINE 5197 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOinhmap =
                             ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIinhmap
                              {-# LINE 5203 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOlocalAttrTypes =
                             ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIlocalAttrTypes
                              {-# LINE 5209 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOoptions =
                             ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIoptions
                              {-# LINE 5215 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patsOsynmap =
                             ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIsynmap
                              {-# LINE 5221 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         ( _patsIattrTypes,_patsIattrs,_patsIcopy,_patsIextraDefs,_patsIsem_lhs) =
                             pats_ _patsOallInhmap _patsOallSynmap _patsOanyLazyKind _patsOinhmap _patsOlocalAttrTypes _patsOoptions _patsOsynmap
                     in  ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOisUnderscore,_lhsOsem_lhs))))
sem_Pattern_Alias :: Identifier ->
                     Identifier ->
                     T_Pattern ->
                     T_Pattern
sem_Pattern_Alias field_ attr_ (T_Pattern pat_) =
    (T_Pattern (\ _lhsIallInhmap
                  _lhsIallSynmap
                  _lhsIanyLazyKind
                  _lhsIinhmap
                  _lhsIlocalAttrTypes
                  _lhsIoptions
                  _lhsIsynmap ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _lhsOextraDefs :: ([(PP_Doc,PP_Doc)])
                         _lhsOisUnderscore :: Bool
                         _lhsOattrs :: (Set String)
                         _lhsOattrTypes :: PP_Doc
                         _lhsOcopy :: Pattern
                         _patOallInhmap :: (Map NontermIdent Attributes)
                         _patOallSynmap :: (Map NontermIdent Attributes)
                         _patOanyLazyKind :: Bool
                         _patOinhmap :: Attributes
                         _patOlocalAttrTypes :: (Map Identifier Type)
                         _patOoptions :: Options
                         _patOsynmap :: Attributes
                         _patIattrTypes :: PP_Doc
                         _patIattrs :: (Set String)
                         _patIcopy :: Pattern
                         _patIextraDefs :: ([(PP_Doc,PP_Doc)])
                         _patIisUnderscore :: Bool
                         _patIsem_lhs :: ( PP_Doc )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1053, column 17)
                         _var =
                             ({-# LINE 1053 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              text $ attrname False field_ attr_
                              {-# LINE 5261 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1054, column 17)
                         _hasTp =
                             ({-# LINE 1054 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              isJust _mbTp
                              {-# LINE 5267 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1055, column 17)
                         _o_sigs =
                             ({-# LINE 1055 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              typeSigs _lhsIoptions
                              {-# LINE 5273 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1057, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 1057 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              ppArg (_hasTp     && _o_sigs    ) _var     (maybe (text "?no type?") ppTp _mbTp    )
                              {-# LINE 5279 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1058, column 17)
                         _lhsOextraDefs =
                             ({-# LINE 1058 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              if _patIisUnderscore
                              then []
                              else [ (_patIsem_lhs, _var    ) ]
                              {-# LINE 5287 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1073, column 16)
                         _lhsOisUnderscore =
                             ({-# LINE 1073 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              False
                              {-# LINE 5293 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1079, column 3)
                         _lhsOattrs =
                             ({-# LINE 1079 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              Set.insert (attrname False field_ attr_) _patIattrs
                              {-# LINE 5299 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1085, column 3)
                         _mbTp =
                             ({-# LINE 1085 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              if field_ == _LHS
                              then Map.lookup attr_ _lhsIsynmap
                              else if field_ == _LOC
                                   then Map.lookup attr_ _lhsIlocalAttrTypes
                                   else Nothing
                              {-# LINE 5309 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1090, column 3)
                         _lhsOattrTypes =
                             ({-# LINE 1090 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              maybe empty (\tp -> (attrname False field_ attr_) >#< "::" >#< ppTp tp) _mbTp
                              >-< _patIattrTypes
                              {-# LINE 5316 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              Alias field_ attr_ _patIcopy
                              {-# LINE 5322 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 5328 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOallInhmap =
                             ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallInhmap
                              {-# LINE 5334 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOallSynmap =
                             ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallSynmap
                              {-# LINE 5340 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOanyLazyKind =
                             ({-# LINE 1241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIanyLazyKind
                              {-# LINE 5346 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOinhmap =
                             ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIinhmap
                              {-# LINE 5352 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOlocalAttrTypes =
                             ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIlocalAttrTypes
                              {-# LINE 5358 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOoptions =
                             ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIoptions
                              {-# LINE 5364 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOsynmap =
                             ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIsynmap
                              {-# LINE 5370 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         ( _patIattrTypes,_patIattrs,_patIcopy,_patIextraDefs,_patIisUnderscore,_patIsem_lhs) =
                             pat_ _patOallInhmap _patOallSynmap _patOanyLazyKind _patOinhmap _patOlocalAttrTypes _patOoptions _patOsynmap
                     in  ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOisUnderscore,_lhsOsem_lhs))))
sem_Pattern_Irrefutable :: T_Pattern ->
                           T_Pattern
sem_Pattern_Irrefutable (T_Pattern pat_) =
    (T_Pattern (\ _lhsIallInhmap
                  _lhsIallSynmap
                  _lhsIanyLazyKind
                  _lhsIinhmap
                  _lhsIlocalAttrTypes
                  _lhsIoptions
                  _lhsIsynmap ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _lhsOattrTypes :: PP_Doc
                         _lhsOattrs :: (Set String)
                         _lhsOextraDefs :: ([(PP_Doc,PP_Doc)])
                         _lhsOcopy :: Pattern
                         _lhsOisUnderscore :: Bool
                         _patOallInhmap :: (Map NontermIdent Attributes)
                         _patOallSynmap :: (Map NontermIdent Attributes)
                         _patOanyLazyKind :: Bool
                         _patOinhmap :: Attributes
                         _patOlocalAttrTypes :: (Map Identifier Type)
                         _patOoptions :: Options
                         _patOsynmap :: Attributes
                         _patIattrTypes :: PP_Doc
                         _patIattrs :: (Set String)
                         _patIcopy :: Pattern
                         _patIextraDefs :: ([(PP_Doc,PP_Doc)])
                         _patIisUnderscore :: Bool
                         _patIsem_lhs :: ( PP_Doc )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1064, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 1064 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              pp_parens (text "lazy" >#< _patIsem_lhs)
                              {-# LINE 5408 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1083, column 40)
                         _lhsOattrTypes =
                             ({-# LINE 1083 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patIattrTypes
                              {-# LINE 5414 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1077, column 36)
                         _lhsOattrs =
                             ({-# LINE 1077 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patIattrs
                              {-# LINE 5420 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1050, column 39)
                         _lhsOextraDefs =
                             ({-# LINE 1050 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patIextraDefs
                              {-# LINE 5426 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              Irrefutable _patIcopy
                              {-# LINE 5432 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 5438 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (up)
                         _lhsOisUnderscore =
                             ({-# LINE 1069 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _patIisUnderscore
                              {-# LINE 5444 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOallInhmap =
                             ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallInhmap
                              {-# LINE 5450 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOallSynmap =
                             ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIallSynmap
                              {-# LINE 5456 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOanyLazyKind =
                             ({-# LINE 1241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIanyLazyKind
                              {-# LINE 5462 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOinhmap =
                             ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIinhmap
                              {-# LINE 5468 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOlocalAttrTypes =
                             ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIlocalAttrTypes
                              {-# LINE 5474 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOoptions =
                             ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIoptions
                              {-# LINE 5480 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- copy rule (down)
                         _patOsynmap =
                             ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              _lhsIsynmap
                              {-# LINE 5486 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         ( _patIattrTypes,_patIattrs,_patIcopy,_patIextraDefs,_patIisUnderscore,_patIsem_lhs) =
                             pat_ _patOallInhmap _patOallSynmap _patOanyLazyKind _patOinhmap _patOlocalAttrTypes _patOoptions _patOsynmap
                     in  ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOisUnderscore,_lhsOsem_lhs))))
sem_Pattern_Underscore :: Pos ->
                          T_Pattern
sem_Pattern_Underscore pos_ =
    (T_Pattern (\ _lhsIallInhmap
                  _lhsIallSynmap
                  _lhsIanyLazyKind
                  _lhsIinhmap
                  _lhsIlocalAttrTypes
                  _lhsIoptions
                  _lhsIsynmap ->
                    (let _lhsOsem_lhs :: ( PP_Doc )
                         _lhsOisUnderscore :: Bool
                         _lhsOattrTypes :: PP_Doc
                         _lhsOattrs :: (Set String)
                         _lhsOextraDefs :: ([(PP_Doc,PP_Doc)])
                         _lhsOcopy :: Pattern
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1063, column 17)
                         _lhsOsem_lhs =
                             ({-# LINE 1063 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              text "_"
                              {-# LINE 5511 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- "./src-ag/ExecutionPlan2Caml.ag"(line 1074, column 16)
                         _lhsOisUnderscore =
                             ({-# LINE 1074 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              True
                              {-# LINE 5517 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1083, column 40)
                         _lhsOattrTypes =
                             ({-# LINE 1083 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              empty
                              {-# LINE 5523 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1077, column 36)
                         _lhsOattrs =
                             ({-# LINE 1077 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              Set.empty
                              {-# LINE 5529 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1050, column 39)
                         _lhsOextraDefs =
                             ({-# LINE 1050 "./src-ag/ExecutionPlan2Caml.ag" #-}
                              []
                              {-# LINE 5535 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _copy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              Underscore pos_
                              {-# LINE 5541 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                         -- self rule
                         _lhsOcopy =
                             ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                              _copy
                              {-# LINE 5547 "dist/build/ExecutionPlan2Caml.hs" #-}
                              )
                     in  ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOisUnderscore,_lhsOsem_lhs))))
-- Patterns ----------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allInhmap            : Map NontermIdent Attributes
         allSynmap            : Map NontermIdent Attributes
         anyLazyKind          : Bool
         inhmap               : Attributes
         localAttrTypes       : Map Identifier Type
         options              : Options
         synmap               : Attributes
      synthesized attributes:
         attrTypes            : PP_Doc
         attrs                : Set String
         copy                 : Patterns 
         extraDefs            : [(PP_Doc,PP_Doc)]
         sem_lhs              : [PP_Doc]
   alternatives:
      alternative Cons:
         child hd             : Pattern 
         child tl             : Patterns 
         visit 0:
            local copy        : _
      alternative Nil:
         visit 0:
            local copy        : _
-}
-- cata
sem_Patterns :: Patterns ->
                T_Patterns
sem_Patterns list =
    (Prelude.foldr sem_Patterns_Cons sem_Patterns_Nil (Prelude.map sem_Pattern list))
-- semantic domain
newtype T_Patterns = T_Patterns ((Map NontermIdent Attributes) ->
                                 (Map NontermIdent Attributes) ->
                                 Bool ->
                                 Attributes ->
                                 (Map Identifier Type) ->
                                 Options ->
                                 Attributes ->
                                 ( PP_Doc,(Set String),Patterns,([(PP_Doc,PP_Doc)]),([PP_Doc])))
data Inh_Patterns = Inh_Patterns {allInhmap_Inh_Patterns :: (Map NontermIdent Attributes),allSynmap_Inh_Patterns :: (Map NontermIdent Attributes),anyLazyKind_Inh_Patterns :: Bool,inhmap_Inh_Patterns :: Attributes,localAttrTypes_Inh_Patterns :: (Map Identifier Type),options_Inh_Patterns :: Options,synmap_Inh_Patterns :: Attributes}
data Syn_Patterns = Syn_Patterns {attrTypes_Syn_Patterns :: PP_Doc,attrs_Syn_Patterns :: (Set String),copy_Syn_Patterns :: Patterns,extraDefs_Syn_Patterns :: ([(PP_Doc,PP_Doc)]),sem_lhs_Syn_Patterns :: ([PP_Doc])}
wrap_Patterns :: T_Patterns ->
                 Inh_Patterns ->
                 Syn_Patterns
wrap_Patterns (T_Patterns sem) (Inh_Patterns _lhsIallInhmap _lhsIallSynmap _lhsIanyLazyKind _lhsIinhmap _lhsIlocalAttrTypes _lhsIoptions _lhsIsynmap) =
    (let ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOsem_lhs) = sem _lhsIallInhmap _lhsIallSynmap _lhsIanyLazyKind _lhsIinhmap _lhsIlocalAttrTypes _lhsIoptions _lhsIsynmap
     in  (Syn_Patterns _lhsOattrTypes _lhsOattrs _lhsOcopy _lhsOextraDefs _lhsOsem_lhs))
sem_Patterns_Cons :: T_Pattern ->
                     T_Patterns ->
                     T_Patterns
sem_Patterns_Cons (T_Pattern hd_) (T_Patterns tl_) =
    (T_Patterns (\ _lhsIallInhmap
                   _lhsIallSynmap
                   _lhsIanyLazyKind
                   _lhsIinhmap
                   _lhsIlocalAttrTypes
                   _lhsIoptions
                   _lhsIsynmap ->
                     (let _lhsOattrTypes :: PP_Doc
                          _lhsOattrs :: (Set String)
                          _lhsOextraDefs :: ([(PP_Doc,PP_Doc)])
                          _lhsOsem_lhs :: ([PP_Doc])
                          _lhsOcopy :: Patterns
                          _hdOallInhmap :: (Map NontermIdent Attributes)
                          _hdOallSynmap :: (Map NontermIdent Attributes)
                          _hdOanyLazyKind :: Bool
                          _hdOinhmap :: Attributes
                          _hdOlocalAttrTypes :: (Map Identifier Type)
                          _hdOoptions :: Options
                          _hdOsynmap :: Attributes
                          _tlOallInhmap :: (Map NontermIdent Attributes)
                          _tlOallSynmap :: (Map NontermIdent Attributes)
                          _tlOanyLazyKind :: Bool
                          _tlOinhmap :: Attributes
                          _tlOlocalAttrTypes :: (Map Identifier Type)
                          _tlOoptions :: Options
                          _tlOsynmap :: Attributes
                          _hdIattrTypes :: PP_Doc
                          _hdIattrs :: (Set String)
                          _hdIcopy :: Pattern
                          _hdIextraDefs :: ([(PP_Doc,PP_Doc)])
                          _hdIisUnderscore :: Bool
                          _hdIsem_lhs :: ( PP_Doc )
                          _tlIattrTypes :: PP_Doc
                          _tlIattrs :: (Set String)
                          _tlIcopy :: Patterns
                          _tlIextraDefs :: ([(PP_Doc,PP_Doc)])
                          _tlIsem_lhs :: ([PP_Doc])
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1083, column 40)
                          _lhsOattrTypes =
                              ({-# LINE 1083 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _hdIattrTypes >-< _tlIattrTypes
                               {-# LINE 5644 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1077, column 36)
                          _lhsOattrs =
                              ({-# LINE 1077 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _hdIattrs `Set.union` _tlIattrs
                               {-# LINE 5650 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1050, column 39)
                          _lhsOextraDefs =
                              ({-# LINE 1050 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _hdIextraDefs ++ _tlIextraDefs
                               {-# LINE 5656 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1049, column 29)
                          _lhsOsem_lhs =
                              ({-# LINE 1049 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _hdIsem_lhs : _tlIsem_lhs
                               {-# LINE 5662 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- self rule
                          _copy =
                              ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                               (:) _hdIcopy _tlIcopy
                               {-# LINE 5668 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- self rule
                          _lhsOcopy =
                              ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                               _copy
                               {-# LINE 5674 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOallInhmap =
                              ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIallInhmap
                               {-# LINE 5680 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOallSynmap =
                              ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIallSynmap
                               {-# LINE 5686 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOanyLazyKind =
                              ({-# LINE 1241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIanyLazyKind
                               {-# LINE 5692 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOinhmap =
                              ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIinhmap
                               {-# LINE 5698 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOlocalAttrTypes =
                              ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIlocalAttrTypes
                               {-# LINE 5704 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOoptions =
                              ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIoptions
                               {-# LINE 5710 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _hdOsynmap =
                              ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIsynmap
                               {-# LINE 5716 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOallInhmap =
                              ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIallInhmap
                               {-# LINE 5722 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOallSynmap =
                              ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIallSynmap
                               {-# LINE 5728 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOanyLazyKind =
                              ({-# LINE 1241 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIanyLazyKind
                               {-# LINE 5734 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOinhmap =
                              ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIinhmap
                               {-# LINE 5740 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOlocalAttrTypes =
                              ({-# LINE 1427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIlocalAttrTypes
                               {-# LINE 5746 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOoptions =
                              ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIoptions
                               {-# LINE 5752 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- copy rule (down)
                          _tlOsynmap =
                              ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               _lhsIsynmap
                               {-# LINE 5758 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          ( _hdIattrTypes,_hdIattrs,_hdIcopy,_hdIextraDefs,_hdIisUnderscore,_hdIsem_lhs) =
                              hd_ _hdOallInhmap _hdOallSynmap _hdOanyLazyKind _hdOinhmap _hdOlocalAttrTypes _hdOoptions _hdOsynmap
                          ( _tlIattrTypes,_tlIattrs,_tlIcopy,_tlIextraDefs,_tlIsem_lhs) =
                              tl_ _tlOallInhmap _tlOallSynmap _tlOanyLazyKind _tlOinhmap _tlOlocalAttrTypes _tlOoptions _tlOsynmap
                      in  ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOsem_lhs))))
sem_Patterns_Nil :: T_Patterns
sem_Patterns_Nil =
    (T_Patterns (\ _lhsIallInhmap
                   _lhsIallSynmap
                   _lhsIanyLazyKind
                   _lhsIinhmap
                   _lhsIlocalAttrTypes
                   _lhsIoptions
                   _lhsIsynmap ->
                     (let _lhsOattrTypes :: PP_Doc
                          _lhsOattrs :: (Set String)
                          _lhsOextraDefs :: ([(PP_Doc,PP_Doc)])
                          _lhsOsem_lhs :: ([PP_Doc])
                          _lhsOcopy :: Patterns
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1083, column 40)
                          _lhsOattrTypes =
                              ({-# LINE 1083 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               empty
                               {-# LINE 5783 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1077, column 36)
                          _lhsOattrs =
                              ({-# LINE 1077 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               Set.empty
                               {-# LINE 5789 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1050, column 39)
                          _lhsOextraDefs =
                              ({-# LINE 1050 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               []
                               {-# LINE 5795 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1049, column 29)
                          _lhsOsem_lhs =
                              ({-# LINE 1049 "./src-ag/ExecutionPlan2Caml.ag" #-}
                               []
                               {-# LINE 5801 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- self rule
                          _copy =
                              ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                               []
                               {-# LINE 5807 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                          -- self rule
                          _lhsOcopy =
                              ({-# LINE 22 "./src-ag/Patterns.ag" #-}
                               _copy
                               {-# LINE 5813 "dist/build/ExecutionPlan2Caml.hs" #-}
                               )
                      in  ( _lhsOattrTypes,_lhsOattrs,_lhsOcopy,_lhsOextraDefs,_lhsOsem_lhs))))
-- Visit -------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInhmap            : Map NontermIdent Attributes
         allInitStates        : Map NontermIdent Int
         allSynmap            : Map NontermIdent Attributes
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         allintramap          : Map StateIdentifier (Map String (Maybe NonLocalAttr))
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         childTypes           : Map Identifier Type
         childintros          : Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))
         con                  : ConstructorIdent
         inhmap               : Attributes
         mrules               : Map Identifier (VisitKind ->  Either Error PP_Doc)
         nextVisits           : Map StateIdentifier StateCtx
         nt                   : NontermIdent
         options              : Options
         params               : [Identifier]
         prevVisits           : Map StateIdentifier StateCtx
         ruledefs             : Map Identifier (Set String)
         ruleuses             : Map Identifier (Map String (Maybe NonLocalAttr))
         synmap               : Attributes
         terminaldefs         : Set String
      synthesized attributes:
         allvisits            :  VisitStateState 
         childvisit           : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         errors               : Seq Error
         fromToStates         : Map VisitIdentifier (Int,Int)
         intramap             : Map StateIdentifier (Map String (Maybe NonLocalAttr))
         lazyIntras           : Set String
         ruleKinds            : Map Identifier (Set VisitKind)
         ruleUsage            : Map Identifier Int
         sem_visit            :   (StateIdentifier,PP_Doc)  
         t_visits             : PP_Doc
         visitKinds           : Map VisitIdentifier VisitKind
         visitdefs            : Map VisitIdentifier (Set Identifier)
         visituses            : Map VisitIdentifier (Set Identifier)
   alternatives:
      alternative Visit:
         child ident          : {VisitIdentifier}
         child from           : {StateIdentifier}
         child to             : {StateIdentifier}
         child inh            : {Set Identifier}
         child syn            : {Set Identifier}
         child steps          : VisitSteps 
         child kind           : {VisitKind}
         visit 0:
            local nameTIn_visit : _
            local nameTOut_visit : _
            local nameNextState : _
            local nameCaller_visit : _
            local nextVisitInfo : _
            local t_params    : _
            local t_c_params  : _
            local contpart    : _
            local inhpart     : _
            local synpart     : _
            local ppTypeList  : _
            local o_sigs      : _
            local nextArgsMp  : _
            local nextArgs    : _
            local nextStExp   : _
            local resultval   : _
            local nextStBuild : _
            local nextStRefExp : _
            local prevVisitInfo : _
            local invokecode  : _
            local thisintra   : _
            local nextintra   : _
            local uses        : _
            local inhVarNms   : _
            local defs        : _
            local defsAsMap   : _
            local lazyIntrasInh : _
-}
-- cata
sem_Visit :: Visit ->
             T_Visit
sem_Visit (Visit _ident _from _to _inh _syn _steps _kind) =
    (sem_Visit_Visit _ident _from _to _inh _syn (sem_VisitSteps _steps) _kind)
-- semantic domain
newtype T_Visit = T_Visit ((Map VisitIdentifier (Int,Int)) ->
                           (Map NontermIdent Attributes) ->
                           (Map NontermIdent Int) ->
                           (Map NontermIdent Attributes) ->
                           (Map VisitIdentifier VisitKind) ->
                           (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                           (Map StateIdentifier (Map String (Maybe NonLocalAttr))) ->
                           (Map VisitIdentifier (Set Identifier)) ->
                           (Map VisitIdentifier (Set Identifier)) ->
                           (Map Identifier Type) ->
                           (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))) ->
                           ConstructorIdent ->
                           Attributes ->
                           (Map Identifier (VisitKind ->  Either Error PP_Doc)) ->
                           (Map StateIdentifier StateCtx) ->
                           NontermIdent ->
                           Options ->
                           ([Identifier]) ->
                           (Map StateIdentifier StateCtx) ->
                           (Map Identifier (Set String)) ->
                           (Map Identifier (Map String (Maybe NonLocalAttr))) ->
                           Attributes ->
                           (Set String) ->
                           ( ( VisitStateState ),(Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),(Seq Error),(Map VisitIdentifier (Int,Int)),(Map StateIdentifier (Map String (Maybe NonLocalAttr))),(Set String),(Map Identifier (Set VisitKind)),(Map Identifier Int),(  (StateIdentifier,PP_Doc)  ),PP_Doc,(Map VisitIdentifier VisitKind),(Map VisitIdentifier (Set Identifier)),(Map VisitIdentifier (Set Identifier))))
data Inh_Visit = Inh_Visit {allFromToStates_Inh_Visit :: (Map VisitIdentifier (Int,Int)),allInhmap_Inh_Visit :: (Map NontermIdent Attributes),allInitStates_Inh_Visit :: (Map NontermIdent Int),allSynmap_Inh_Visit :: (Map NontermIdent Attributes),allVisitKinds_Inh_Visit :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_Visit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),allintramap_Inh_Visit :: (Map StateIdentifier (Map String (Maybe NonLocalAttr))),avisitdefs_Inh_Visit :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_Visit :: (Map VisitIdentifier (Set Identifier)),childTypes_Inh_Visit :: (Map Identifier Type),childintros_Inh_Visit :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),con_Inh_Visit :: ConstructorIdent,inhmap_Inh_Visit :: Attributes,mrules_Inh_Visit :: (Map Identifier (VisitKind ->  Either Error PP_Doc)),nextVisits_Inh_Visit :: (Map StateIdentifier StateCtx),nt_Inh_Visit :: NontermIdent,options_Inh_Visit :: Options,params_Inh_Visit :: ([Identifier]),prevVisits_Inh_Visit :: (Map StateIdentifier StateCtx),ruledefs_Inh_Visit :: (Map Identifier (Set String)),ruleuses_Inh_Visit :: (Map Identifier (Map String (Maybe NonLocalAttr))),synmap_Inh_Visit :: Attributes,terminaldefs_Inh_Visit :: (Set String)}
data Syn_Visit = Syn_Visit {allvisits_Syn_Visit :: ( VisitStateState ),childvisit_Syn_Visit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),errors_Syn_Visit :: (Seq Error),fromToStates_Syn_Visit :: (Map VisitIdentifier (Int,Int)),intramap_Syn_Visit :: (Map StateIdentifier (Map String (Maybe NonLocalAttr))),lazyIntras_Syn_Visit :: (Set String),ruleKinds_Syn_Visit :: (Map Identifier (Set VisitKind)),ruleUsage_Syn_Visit :: (Map Identifier Int),sem_visit_Syn_Visit :: (  (StateIdentifier,PP_Doc)  ),t_visits_Syn_Visit :: PP_Doc,visitKinds_Syn_Visit :: (Map VisitIdentifier VisitKind),visitdefs_Syn_Visit :: (Map VisitIdentifier (Set Identifier)),visituses_Syn_Visit :: (Map VisitIdentifier (Set Identifier))}
wrap_Visit :: T_Visit ->
              Inh_Visit ->
              Syn_Visit
wrap_Visit (T_Visit sem) (Inh_Visit _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIcon _lhsIinhmap _lhsImrules _lhsInextVisits _lhsInt _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs) =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOerrors,_lhsOfromToStates,_lhsOintramap,_lhsOlazyIntras,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_visit,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIcon _lhsIinhmap _lhsImrules _lhsInextVisits _lhsInt _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs
     in  (Syn_Visit _lhsOallvisits _lhsOchildvisit _lhsOerrors _lhsOfromToStates _lhsOintramap _lhsOlazyIntras _lhsOruleKinds _lhsOruleUsage _lhsOsem_visit _lhsOt_visits _lhsOvisitKinds _lhsOvisitdefs _lhsOvisituses))
sem_Visit_Visit :: VisitIdentifier ->
                   StateIdentifier ->
                   StateIdentifier ->
                   (Set Identifier) ->
                   (Set Identifier) ->
                   T_VisitSteps ->
                   VisitKind ->
                   T_Visit
sem_Visit_Visit ident_ from_ to_ inh_ syn_ (T_VisitSteps steps_) kind_ =
    (T_Visit (\ _lhsIallFromToStates
                _lhsIallInhmap
                _lhsIallInitStates
                _lhsIallSynmap
                _lhsIallVisitKinds
                _lhsIallchildvisit
                _lhsIallintramap
                _lhsIavisitdefs
                _lhsIavisituses
                _lhsIchildTypes
                _lhsIchildintros
                _lhsIcon
                _lhsIinhmap
                _lhsImrules
                _lhsInextVisits
                _lhsInt
                _lhsIoptions
                _lhsIparams
                _lhsIprevVisits
                _lhsIruledefs
                _lhsIruleuses
                _lhsIsynmap
                _lhsIterminaldefs ->
                  (let _lhsOallvisits :: ( VisitStateState )
                       _lhsOt_visits :: PP_Doc
                       _lhsOsem_visit :: (  (StateIdentifier,PP_Doc)  )
                       _stepsOfollow :: PP_Doc
                       _stepsOkind :: VisitKind
                       _stepsOindex :: Int
                       _stepsOprevMaxSimRefs :: Int
                       _stepsOuseParallel :: Bool
                       _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                       _lhsOintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                       _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                       _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                       _lhsOlazyIntras :: (Set String)
                       _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                       _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                       _lhsOerrors :: (Seq Error)
                       _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                       _lhsOruleUsage :: (Map Identifier Int)
                       _stepsOallFromToStates :: (Map VisitIdentifier (Int,Int))
                       _stepsOallInitStates :: (Map NontermIdent Int)
                       _stepsOallVisitKinds :: (Map VisitIdentifier VisitKind)
                       _stepsOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                       _stepsOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                       _stepsOavisituses :: (Map VisitIdentifier (Set Identifier))
                       _stepsOchildTypes :: (Map Identifier Type)
                       _stepsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                       _stepsOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                       _stepsOoptions :: Options
                       _stepsOruledefs :: (Map Identifier (Set String))
                       _stepsOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                       _stepsIdefs :: (Set String)
                       _stepsIerrors :: (Seq Error)
                       _stepsIindex :: Int
                       _stepsIisLast :: Bool
                       _stepsIlazyIntras :: (Set String)
                       _stepsIprevMaxSimRefs :: Int
                       _stepsIruleKinds :: (Map Identifier (Set VisitKind))
                       _stepsIruleUsage :: (Map Identifier Int)
                       _stepsIsem_steps :: PP_Doc
                       _stepsIsize :: Int
                       _stepsIuses :: (Map String (Maybe NonLocalAttr))
                       _stepsIvisitKinds :: (Map VisitIdentifier VisitKind)
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 432, column 11)
                       _lhsOallvisits =
                           ({-# LINE 432 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            (ident_, from_, to_)
                            {-# LINE 6011 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 535, column 3)
                       _nameTIn_visit =
                           ({-# LINE 535 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            conNmTVisitIn _lhsInt ident_
                            {-# LINE 6017 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 536, column 3)
                       _nameTOut_visit =
                           ({-# LINE 536 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            conNmTVisitOut _lhsInt ident_
                            {-# LINE 6023 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 537, column 3)
                       _nameNextState =
                           ({-# LINE 537 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            type_nt_sem _lhsInt to_
                            {-# LINE 6029 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 538, column 3)
                       _nameCaller_visit =
                           ({-# LINE 538 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            type_caller_visit _lhsInt ident_
                            {-# LINE 6035 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 540, column 3)
                       _nextVisitInfo =
                           ({-# LINE 540 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.findWithDefault ManyVis to_ _lhsInextVisits
                            {-# LINE 6041 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 542, column 3)
                       _t_params =
                           ({-# LINE 542 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppTypeParams _lhsIparams
                            {-# LINE 6047 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 543, column 3)
                       _t_c_params =
                           ({-# LINE 543 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppTypeParams (cont_tvar : map pp _lhsIparams)
                            {-# LINE 6053 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 547, column 3)
                       _lhsOt_visits =
                           ({-# LINE 547 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            "and" >#< _t_c_params     >#< _nameCaller_visit     >#< "=" >#< ppRecordTp
                              [ nm_inh _lhsInt ident_ >#< ":" >#< _t_params     >#< conNmTVisitIn _lhsInt ident_
                              , nm_cont _lhsInt ident_ >#< ":" >#< _t_params     >#< conNmTVisitOut _lhsInt ident_ >#< "->" >#< cont_tvar
                              ]
                            >-< "and" >#< _t_params     >#< _nameTIn_visit      >#< "=" >#< ppRecordTp _inhpart
                            >-< "and" >#< _t_params     >#< _nameTOut_visit     >#< "=" >#< ppRecordTp (_synpart     ++ _contpart    )
                            {-# LINE 6064 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 554, column 3)
                       _contpart =
                           ({-# LINE 554 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            case _nextVisitInfo     of
                              NoneVis -> []
                              _       -> [ nm_outarg_cont _lhsInt ident_ >#< ":" >#< _t_params     >#< _nameNextState     ]
                            {-# LINE 6072 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 558, column 3)
                       _inhpart =
                           ({-# LINE 558 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _ppTypeList     nm_inarg inh_ _lhsIinhmap
                            {-# LINE 6078 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 559, column 3)
                       _synpart =
                           ({-# LINE 559 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _ppTypeList     nm_outarg syn_ _lhsIsynmap
                            {-# LINE 6084 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 560, column 3)
                       _ppTypeList =
                           ({-# LINE 560 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            \f s m -> map (\i -> case Map.lookup i m of
                                                   Just tp -> f i _lhsInt ident_ >#< ":" >#< ppTp tp ) $ Set.toList s
                            {-# LINE 6091 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 794, column 3)
                       _o_sigs =
                           ({-# LINE 794 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            typeSigs _lhsIoptions
                            {-# LINE 6097 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 795, column 3)
                       _lhsOsem_visit =
                           ({-# LINE 795 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ( from_
                            , let resTp = _t_params     >#< _nameTOut_visit
                                  argTp = _t_params     >#< _nameTIn_visit
                                  argMatch = ppRecordVal [ nm_inarg i _lhsInt ident_ >#< "=" >#< lhsname True i | i <- Set.toList inh_ ]
                              in ppFunDecl _o_sigs     (nm_visit ident_) [(argMatch, argTp)] resTp _stepsIsem_steps
                            )
                            {-# LINE 6108 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 802, column 3)
                       _stepsOfollow =
                           ({-# LINE 802 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _nextStBuild     >-< _resultval
                            {-# LINE 6114 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 804, column 3)
                       _nextArgsMp =
                           ({-# LINE 804 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            maybe Map.empty id $ Map.lookup to_ _lhsIallintramap
                            {-# LINE 6120 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 805, column 3)
                       _nextArgs =
                           ({-# LINE 805 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppSpaced $ Map.keys $ _nextArgsMp
                            {-# LINE 6126 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 806, column 3)
                       _nextStExp =
                           ({-# LINE 806 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            nm_st to_ >#< _nextArgs     >#< dummyArg _lhsIoptions (Map.null _nextArgsMp    )
                            {-# LINE 6132 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 808, column 3)
                       _resultval =
                           ({-# LINE 808 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            ppRecordVal
                              (  [ nm_outarg i _lhsInt ident_ >#< "=" >#< lhsname False i | i <- Set.toList syn_ ]
                              ++ [ _nextStRefExp     ])
                            {-# LINE 6140 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 812, column 3)
                       (_nextStBuild,_nextStRefExp) =
                           ({-# LINE 812 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            case _nextVisitInfo     of
                              NoneVis  -> (empty, empty)
                              _        -> ( "let" >#< nextStName >#< "=" >#< _nextStExp     >#< "in"
                                          , nm_outarg_cont _lhsInt ident_ >#< "=" >#< nextStName)
                            {-# LINE 6149 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 828, column 20)
                       _stepsOkind =
                           ({-# LINE 828 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            kind_
                            {-# LINE 6155 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 880, column 22)
                       _stepsOindex =
                           ({-# LINE 880 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            0
                            {-# LINE 6161 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 887, column 22)
                       _stepsOprevMaxSimRefs =
                           ({-# LINE 887 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            0
                            {-# LINE 6167 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 904, column 22)
                       _stepsOuseParallel =
                           ({-# LINE 904 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            False
                            {-# LINE 6173 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1160, column 3)
                       _prevVisitInfo =
                           ({-# LINE 1160 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.findWithDefault ManyVis from_ _lhsInextVisits
                            {-# LINE 6179 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1161, column 3)
                       _lhsOchildvisit =
                           ({-# LINE 1161 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton ident_ _invokecode
                            {-# LINE 6185 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1162, column 3)
                       _invokecode =
                           ({-# LINE 1162 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            \chld childTp kind follow ->
                              let code = cont >-< inps >-< call
                                  childNmTo   = text $ stname chld to_
                                  childNmFrom = text $ stname chld from_
                                  childTpArgs = case childTp of
                                                  NT _ args _ -> args
                                                  _           -> error "generate visit call: type of the child is not a nonterminal!"
                                  cont = "let" >#< contNm >#< ppArg _o_sigs     (ppRecordVal cont_in) cont_in_tp >#< "="
                                         >-< indent 2 follow
                                         >#< "in"
                                  cont_in = [ nm_outarg i _lhsInt ident_ >#< "=" >#< attrname True chld i | i <- Set.toList syn_ ]
                                            ++ case _nextVisitInfo     of
                                                 NoneVis -> []
                                                 _       -> [ nm_outarg_cont _lhsInt ident_ >#< "=" >#< childNmTo ]
                                  cont_in_tp = ppTypeParams childTpArgs >#< _nameTOut_visit
                                  inps = "let" >#< inpsNm >#< "=" >#< ppRecordVal
                                           [ nm_inh _lhsInt ident_ >#< "=" >#< ppRecordVal inps_in
                                           , nm_cont _lhsInt ident_ >#< "=" >#< contNm
                                           ] >#< "in"
                                  inps_in = [ nm_inarg i _lhsInt ident_ >#< "=" >#< attrname False chld i | i <- Set.toList inh_ ]
                                  call = childNmFrom >|< "." >|< nm_invoke _lhsInt from_ >#< arg
                                  arg = case _prevVisitInfo     of
                                          NoneVis  -> error "error: invocation of a visit from a state that has no next visits"
                                          OneVis _ -> pp inpsNm
                                          ManyVis  -> pp_parens (con_visit _lhsInt ident_ >#< inpsNm)
                              in if kind `compatibleKind` kind_
                                 then Right code
                                 else Left $ IncompatibleVisitKind chld ident_ kind kind_
                            {-# LINE 6218 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1268, column 11)
                       _thisintra =
                           ({-# LINE 1268 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            (_uses     `Map.union` _nextintra    ) `Map.difference` _defsAsMap
                            {-# LINE 6224 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1269, column 11)
                       _lhsOintramap =
                           ({-# LINE 1269 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton from_ _thisintra
                            {-# LINE 6230 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1270, column 11)
                       _nextintra =
                           ({-# LINE 1270 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            maybe Map.empty id $ Map.lookup to_ _lhsIallintramap
                            {-# LINE 6236 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1271, column 11)
                       _uses =
                           ({-# LINE 1271 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            let mp1 = _stepsIuses
                                mp2 = Map.fromList [ (lhsname False i, Just (AttrSyn _LHS i)) | i <- Set.elems syn_ ]
                            in mp1 `Map.union` mp2
                            {-# LINE 6244 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1274, column 11)
                       _inhVarNms =
                           ({-# LINE 1274 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Set.map (lhsname True) inh_
                            {-# LINE 6250 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1275, column 11)
                       _defs =
                           ({-# LINE 1275 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _stepsIdefs `Set.union` _inhVarNms     `Set.union` _lhsIterminaldefs
                            {-# LINE 6256 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1276, column 11)
                       _defsAsMap =
                           ({-# LINE 1276 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.fromList [ (a, Nothing) | a <- Set.elems _defs     ]
                            {-# LINE 6262 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1300, column 11)
                       _lhsOvisitdefs =
                           ({-# LINE 1300 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton ident_ syn_
                            {-# LINE 6268 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1301, column 11)
                       _lhsOvisituses =
                           ({-# LINE 1301 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton ident_ inh_
                            {-# LINE 6274 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1333, column 3)
                       _lazyIntrasInh =
                           ({-# LINE 1333 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            case kind_ of
                              VisitPure False -> _inhVarNms     `Set.union` _stepsIdefs
                              _               -> Set.empty
                            {-# LINE 6282 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1336, column 3)
                       _lhsOlazyIntras =
                           ({-# LINE 1336 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lazyIntrasInh     `Set.union` _stepsIlazyIntras
                            {-# LINE 6288 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1399, column 3)
                       _lhsOfromToStates =
                           ({-# LINE 1399 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton ident_ (from_, to_)
                            {-# LINE 6294 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- "./src-ag/ExecutionPlan2Caml.ag"(line 1443, column 3)
                       _lhsOvisitKinds =
                           ({-# LINE 1443 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            Map.singleton ident_ kind_
                            {-# LINE 6300 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                       _lhsOerrors =
                           ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _stepsIerrors
                            {-# LINE 6306 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                       _lhsOruleKinds =
                           ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _stepsIruleKinds
                            {-# LINE 6312 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                       _lhsOruleUsage =
                           ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _stepsIruleUsage
                            {-# LINE 6318 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOallFromToStates =
                           ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIallFromToStates
                            {-# LINE 6324 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOallInitStates =
                           ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIallInitStates
                            {-# LINE 6330 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOallVisitKinds =
                           ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIallVisitKinds
                            {-# LINE 6336 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOallchildvisit =
                           ({-# LINE 1149 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIallchildvisit
                            {-# LINE 6342 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOavisitdefs =
                           ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIavisitdefs
                            {-# LINE 6348 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOavisituses =
                           ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIavisituses
                            {-# LINE 6354 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOchildTypes =
                           ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIchildTypes
                            {-# LINE 6360 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOchildintros =
                           ({-# LINE 912 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIchildintros
                            {-# LINE 6366 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOmrules =
                           ({-# LINE 835 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsImrules
                            {-# LINE 6372 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOoptions =
                           ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIoptions
                            {-# LINE 6378 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOruledefs =
                           ({-# LINE 1281 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIruledefs
                            {-# LINE 6384 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       -- copy rule (down)
                       _stepsOruleuses =
                           ({-# LINE 1282 "./src-ag/ExecutionPlan2Caml.ag" #-}
                            _lhsIruleuses
                            {-# LINE 6390 "dist/build/ExecutionPlan2Caml.hs" #-}
                            )
                       ( _stepsIdefs,_stepsIerrors,_stepsIindex,_stepsIisLast,_stepsIlazyIntras,_stepsIprevMaxSimRefs,_stepsIruleKinds,_stepsIruleUsage,_stepsIsem_steps,_stepsIsize,_stepsIuses,_stepsIvisitKinds) =
                           steps_ _stepsOallFromToStates _stepsOallInitStates _stepsOallVisitKinds _stepsOallchildvisit _stepsOavisitdefs _stepsOavisituses _stepsOchildTypes _stepsOchildintros _stepsOfollow _stepsOindex _stepsOkind _stepsOmrules _stepsOoptions _stepsOprevMaxSimRefs _stepsOruledefs _stepsOruleuses _stepsOuseParallel
                   in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOerrors,_lhsOfromToStates,_lhsOintramap,_lhsOlazyIntras,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_visit,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
-- VisitStep ---------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInitStates        : Map NontermIdent Int
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         childTypes           : Map Identifier Type
         childintros          : Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))
         follow               : PP_Doc
         kind                 : VisitKind
         mrules               : Map Identifier (VisitKind ->  Either Error PP_Doc)
         options              : Options
         ruledefs             : Map Identifier (Set String)
         ruleuses             : Map Identifier (Map String (Maybe NonLocalAttr))
         useParallel          : Bool
      chained attributes:
         index                : Int
         isLast               : Bool
         prevMaxSimRefs       : Int
      synthesized attributes:
         defs                 : Set String
         errors               : Seq Error
         lazyIntras           : Set String
         ruleKinds            : Map Identifier (Set VisitKind)
         ruleUsage            : Map Identifier Int
         sem_steps            : PP_Doc
         uses                 : Map String (Maybe NonLocalAttr)
         visitKinds           : Map VisitIdentifier VisitKind
   alternatives:
      alternative Sem:
         child name           : {Identifier}
         visit 0:
            local ruleItf     : _
            local sem_steps   : _
      alternative ChildVisit:
         child child          : {Identifier}
         child nonterm        : {NontermIdent}
         child visit          : {VisitIdentifier}
         visit 0:
            local visitItf    : _
            local childType   : _
            local from        : _
            local to          : _
      alternative PureGroup:
         child steps          : VisitSteps 
         child ordered        : {Bool}
      alternative Sim:
         child steps          : VisitSteps 
         visit 0:
            local useParallel : _
      alternative ChildIntro:
         child child          : {Identifier}
         visit 0:
            local attachItf   : _
            local sem_steps   : _
-}
-- cata
sem_VisitStep :: VisitStep ->
                 T_VisitStep
sem_VisitStep (Sem _name) =
    (sem_VisitStep_Sem _name)
sem_VisitStep (ChildVisit _child _nonterm _visit) =
    (sem_VisitStep_ChildVisit _child _nonterm _visit)
sem_VisitStep (PureGroup _steps _ordered) =
    (sem_VisitStep_PureGroup (sem_VisitSteps _steps) _ordered)
sem_VisitStep (Sim _steps) =
    (sem_VisitStep_Sim (sem_VisitSteps _steps))
sem_VisitStep (ChildIntro _child) =
    (sem_VisitStep_ChildIntro _child)
-- semantic domain
newtype T_VisitStep = T_VisitStep ((Map VisitIdentifier (Int,Int)) ->
                                   (Map NontermIdent Int) ->
                                   (Map VisitIdentifier VisitKind) ->
                                   (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                                   (Map VisitIdentifier (Set Identifier)) ->
                                   (Map VisitIdentifier (Set Identifier)) ->
                                   (Map Identifier Type) ->
                                   (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))) ->
                                   PP_Doc ->
                                   Int ->
                                   Bool ->
                                   VisitKind ->
                                   (Map Identifier (VisitKind ->  Either Error PP_Doc)) ->
                                   Options ->
                                   Int ->
                                   (Map Identifier (Set String)) ->
                                   (Map Identifier (Map String (Maybe NonLocalAttr))) ->
                                   Bool ->
                                   ( (Set String),(Seq Error),Int,Bool,(Set String),Int,(Map Identifier (Set VisitKind)),(Map Identifier Int),PP_Doc,(Map String (Maybe NonLocalAttr)),(Map VisitIdentifier VisitKind)))
data Inh_VisitStep = Inh_VisitStep {allFromToStates_Inh_VisitStep :: (Map VisitIdentifier (Int,Int)),allInitStates_Inh_VisitStep :: (Map NontermIdent Int),allVisitKinds_Inh_VisitStep :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_VisitStep :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),avisitdefs_Inh_VisitStep :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_VisitStep :: (Map VisitIdentifier (Set Identifier)),childTypes_Inh_VisitStep :: (Map Identifier Type),childintros_Inh_VisitStep :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),follow_Inh_VisitStep :: PP_Doc,index_Inh_VisitStep :: Int,isLast_Inh_VisitStep :: Bool,kind_Inh_VisitStep :: VisitKind,mrules_Inh_VisitStep :: (Map Identifier (VisitKind ->  Either Error PP_Doc)),options_Inh_VisitStep :: Options,prevMaxSimRefs_Inh_VisitStep :: Int,ruledefs_Inh_VisitStep :: (Map Identifier (Set String)),ruleuses_Inh_VisitStep :: (Map Identifier (Map String (Maybe NonLocalAttr))),useParallel_Inh_VisitStep :: Bool}
data Syn_VisitStep = Syn_VisitStep {defs_Syn_VisitStep :: (Set String),errors_Syn_VisitStep :: (Seq Error),index_Syn_VisitStep :: Int,isLast_Syn_VisitStep :: Bool,lazyIntras_Syn_VisitStep :: (Set String),prevMaxSimRefs_Syn_VisitStep :: Int,ruleKinds_Syn_VisitStep :: (Map Identifier (Set VisitKind)),ruleUsage_Syn_VisitStep :: (Map Identifier Int),sem_steps_Syn_VisitStep :: PP_Doc,uses_Syn_VisitStep :: (Map String (Maybe NonLocalAttr)),visitKinds_Syn_VisitStep :: (Map VisitIdentifier VisitKind)}
wrap_VisitStep :: T_VisitStep ->
                  Inh_VisitStep ->
                  Syn_VisitStep
wrap_VisitStep (T_VisitStep sem) (Inh_VisitStep _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIfollow _lhsIindex _lhsIisLast _lhsIkind _lhsImrules _lhsIoptions _lhsIprevMaxSimRefs _lhsIruledefs _lhsIruleuses _lhsIuseParallel) =
    (let ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOuses,_lhsOvisitKinds) = sem _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIfollow _lhsIindex _lhsIisLast _lhsIkind _lhsImrules _lhsIoptions _lhsIprevMaxSimRefs _lhsIruledefs _lhsIruleuses _lhsIuseParallel
     in  (Syn_VisitStep _lhsOdefs _lhsOerrors _lhsOindex _lhsOisLast _lhsOlazyIntras _lhsOprevMaxSimRefs _lhsOruleKinds _lhsOruleUsage _lhsOsem_steps _lhsOuses _lhsOvisitKinds))
sem_VisitStep_Sem :: Identifier ->
                     T_VisitStep
sem_VisitStep_Sem name_ =
    (T_VisitStep (\ _lhsIallFromToStates
                    _lhsIallInitStates
                    _lhsIallVisitKinds
                    _lhsIallchildvisit
                    _lhsIavisitdefs
                    _lhsIavisituses
                    _lhsIchildTypes
                    _lhsIchildintros
                    _lhsIfollow
                    _lhsIindex
                    _lhsIisLast
                    _lhsIkind
                    _lhsImrules
                    _lhsIoptions
                    _lhsIprevMaxSimRefs
                    _lhsIruledefs
                    _lhsIruleuses
                    _lhsIuseParallel ->
                      (let _lhsOerrors :: (Seq Error)
                           _lhsOsem_steps :: PP_Doc
                           _lhsOruleUsage :: (Map Identifier Int)
                           _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                           _lhsOdefs :: (Set String)
                           _lhsOuses :: (Map String (Maybe NonLocalAttr))
                           _lhsOlazyIntras :: (Set String)
                           _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                           _lhsOindex :: Int
                           _lhsOisLast :: Bool
                           _lhsOprevMaxSimRefs :: Int
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 845, column 16)
                           _ruleItf =
                               ({-# LINE 845 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.findWithDefault (error $ "Rule "  ++ show name_  ++ " not found") name_ _lhsImrules
                                {-# LINE 6532 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 846, column 16)
                           (_lhsOerrors,_sem_steps) =
                               ({-# LINE 846 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                case _ruleItf     _lhsIkind of
                                  Left e     -> (Seq.singleton e, empty)
                                  Right stmt -> (Seq.empty, stmt)
                                {-# LINE 6540 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 849, column 16)
                           _lhsOsem_steps =
                               ({-# LINE 849 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _sem_steps     >-< _lhsIfollow
                                {-# LINE 6546 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1221, column 32)
                           _lhsOruleUsage =
                               ({-# LINE 1221 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.singleton name_ 1
                                {-# LINE 6552 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1231, column 3)
                           _lhsOruleKinds =
                               ({-# LINE 1231 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.singleton name_ (Set.singleton _lhsIkind)
                                {-# LINE 6558 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1316, column 16)
                           _lhsOdefs =
                               ({-# LINE 1316 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                maybe (error "Rule not found") id $ Map.lookup name_ _lhsIruledefs
                                {-# LINE 6564 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1317, column 16)
                           _lhsOuses =
                               ({-# LINE 1317 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                maybe (error "Rule not found") id $ Map.lookup name_ _lhsIruleuses
                                {-# LINE 6570 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                           _lhsOlazyIntras =
                               ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Set.empty
                                {-# LINE 6576 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                           _lhsOvisitKinds =
                               ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                mempty
                                {-# LINE 6582 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOindex =
                               ({-# LINE 875 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIindex
                                {-# LINE 6588 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOisLast =
                               ({-# LINE 894 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIisLast
                                {-# LINE 6594 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOprevMaxSimRefs =
                               ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIprevMaxSimRefs
                                {-# LINE 6600 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                       in  ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOuses,_lhsOvisitKinds))))
sem_VisitStep_ChildVisit :: Identifier ->
                            NontermIdent ->
                            VisitIdentifier ->
                            T_VisitStep
sem_VisitStep_ChildVisit child_ nonterm_ visit_ =
    (T_VisitStep (\ _lhsIallFromToStates
                    _lhsIallInitStates
                    _lhsIallVisitKinds
                    _lhsIallchildvisit
                    _lhsIavisitdefs
                    _lhsIavisituses
                    _lhsIchildTypes
                    _lhsIchildintros
                    _lhsIfollow
                    _lhsIindex
                    _lhsIisLast
                    _lhsIkind
                    _lhsImrules
                    _lhsIoptions
                    _lhsIprevMaxSimRefs
                    _lhsIruledefs
                    _lhsIruleuses
                    _lhsIuseParallel ->
                      (let _lhsOerrors :: (Seq Error)
                           _lhsOsem_steps :: PP_Doc
                           _lhsOdefs :: (Set String)
                           _lhsOuses :: (Map String (Maybe NonLocalAttr))
                           _lhsOlazyIntras :: (Set String)
                           _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                           _lhsOruleUsage :: (Map Identifier Int)
                           _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                           _lhsOindex :: Int
                           _lhsOisLast :: Bool
                           _lhsOprevMaxSimRefs :: Int
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 856, column 16)
                           _visitItf =
                               ({-# LINE 856 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.findWithDefault (error $ "Visit " ++ show visit_ ++ " not found") visit_ _lhsIallchildvisit
                                {-# LINE 6641 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 857, column 16)
                           _childType =
                               ({-# LINE 857 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.findWithDefault (error ("type of child " ++ show child_ ++ " is not in the childTypes map! " ++ show _lhsIchildTypes)) child_ _lhsIchildTypes
                                {-# LINE 6647 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 858, column 16)
                           (_lhsOerrors,_lhsOsem_steps) =
                               ({-# LINE 858 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                case _visitItf     child_ _childType     _lhsIkind _lhsIfollow of
                                  Left e      -> (Seq.singleton e, empty)
                                  Right steps -> (Seq.empty, steps)
                                {-# LINE 6655 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1318, column 16)
                           _lhsOdefs =
                               ({-# LINE 1318 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Set.insert (stname child_ _to) $ maybe (error "Visit not found") (Set.map $ attrname True child_) $ Map.lookup visit_ _lhsIavisitdefs
                                {-# LINE 6661 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1319, column 16)
                           _lhsOuses =
                               ({-# LINE 1319 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                let convert attrs = Map.fromList [ (attrname False child_ attr, Just $ mkNonLocalAttr True child_ attr) | attr <- Set.elems attrs ]
                                in Map.insert (stname child_ _from) Nothing $ convert $
                                     maybe (error "Visit not found") id $ Map.lookup visit_ _lhsIavisituses
                                {-# LINE 6669 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1405, column 3)
                           (_from,_to) =
                               ({-# LINE 1405 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.findWithDefault (error "visit not in allFromToStates") visit_ _lhsIallFromToStates
                                {-# LINE 6675 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                           _lhsOlazyIntras =
                               ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Set.empty
                                {-# LINE 6681 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                           _lhsOruleKinds =
                               ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.empty
                                {-# LINE 6687 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                           _lhsOruleUsage =
                               ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.empty
                                {-# LINE 6693 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                           _lhsOvisitKinds =
                               ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                mempty
                                {-# LINE 6699 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOindex =
                               ({-# LINE 875 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIindex
                                {-# LINE 6705 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOisLast =
                               ({-# LINE 894 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIisLast
                                {-# LINE 6711 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOprevMaxSimRefs =
                               ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIprevMaxSimRefs
                                {-# LINE 6717 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                       in  ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOuses,_lhsOvisitKinds))))
sem_VisitStep_PureGroup :: T_VisitSteps ->
                           Bool ->
                           T_VisitStep
sem_VisitStep_PureGroup (T_VisitSteps steps_) ordered_ =
    (T_VisitStep (\ _lhsIallFromToStates
                    _lhsIallInitStates
                    _lhsIallVisitKinds
                    _lhsIallchildvisit
                    _lhsIavisitdefs
                    _lhsIavisituses
                    _lhsIchildTypes
                    _lhsIchildintros
                    _lhsIfollow
                    _lhsIindex
                    _lhsIisLast
                    _lhsIkind
                    _lhsImrules
                    _lhsIoptions
                    _lhsIprevMaxSimRefs
                    _lhsIruledefs
                    _lhsIruleuses
                    _lhsIuseParallel ->
                      (let _stepsOkind :: VisitKind
                           _lhsOlazyIntras :: (Set String)
                           _lhsOdefs :: (Set String)
                           _lhsOerrors :: (Seq Error)
                           _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                           _lhsOruleUsage :: (Map Identifier Int)
                           _lhsOsem_steps :: PP_Doc
                           _lhsOuses :: (Map String (Maybe NonLocalAttr))
                           _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                           _lhsOindex :: Int
                           _lhsOisLast :: Bool
                           _lhsOprevMaxSimRefs :: Int
                           _stepsOallFromToStates :: (Map VisitIdentifier (Int,Int))
                           _stepsOallInitStates :: (Map NontermIdent Int)
                           _stepsOallVisitKinds :: (Map VisitIdentifier VisitKind)
                           _stepsOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                           _stepsOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                           _stepsOavisituses :: (Map VisitIdentifier (Set Identifier))
                           _stepsOchildTypes :: (Map Identifier Type)
                           _stepsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                           _stepsOfollow :: PP_Doc
                           _stepsOindex :: Int
                           _stepsOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                           _stepsOoptions :: Options
                           _stepsOprevMaxSimRefs :: Int
                           _stepsOruledefs :: (Map Identifier (Set String))
                           _stepsOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                           _stepsOuseParallel :: Bool
                           _stepsIdefs :: (Set String)
                           _stepsIerrors :: (Seq Error)
                           _stepsIindex :: Int
                           _stepsIisLast :: Bool
                           _stepsIlazyIntras :: (Set String)
                           _stepsIprevMaxSimRefs :: Int
                           _stepsIruleKinds :: (Map Identifier (Set VisitKind))
                           _stepsIruleUsage :: (Map Identifier Int)
                           _stepsIsem_steps :: PP_Doc
                           _stepsIsize :: Int
                           _stepsIuses :: (Map String (Maybe NonLocalAttr))
                           _stepsIvisitKinds :: (Map VisitIdentifier VisitKind)
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 832, column 3)
                           _stepsOkind =
                               ({-# LINE 832 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                VisitPure ordered_
                                {-# LINE 6786 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 1339, column 3)
                           _lhsOlazyIntras =
                               ({-# LINE 1339 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                if ordered_
                                then _stepsIlazyIntras
                                else _stepsIdefs
                                {-# LINE 6794 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1313, column 38)
                           _lhsOdefs =
                               ({-# LINE 1313 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIdefs
                                {-# LINE 6800 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                           _lhsOerrors =
                               ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIerrors
                                {-# LINE 6806 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                           _lhsOruleKinds =
                               ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIruleKinds
                                {-# LINE 6812 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                           _lhsOruleUsage =
                               ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIruleUsage
                                {-# LINE 6818 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 836, column 59)
                           _lhsOsem_steps =
                               ({-# LINE 836 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIsem_steps
                                {-# LINE 6824 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1314, column 38)
                           _lhsOuses =
                               ({-# LINE 1314 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIuses
                                {-# LINE 6830 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                           _lhsOvisitKinds =
                               ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIvisitKinds
                                {-# LINE 6836 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (up)
                           _lhsOindex =
                               ({-# LINE 875 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIindex
                                {-# LINE 6842 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (up)
                           _lhsOisLast =
                               ({-# LINE 894 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIisLast
                                {-# LINE 6848 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (up)
                           _lhsOprevMaxSimRefs =
                               ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIprevMaxSimRefs
                                {-# LINE 6854 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallFromToStates =
                               ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallFromToStates
                                {-# LINE 6860 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallInitStates =
                               ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallInitStates
                                {-# LINE 6866 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallVisitKinds =
                               ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallVisitKinds
                                {-# LINE 6872 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallchildvisit =
                               ({-# LINE 1149 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallchildvisit
                                {-# LINE 6878 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOavisitdefs =
                               ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIavisitdefs
                                {-# LINE 6884 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOavisituses =
                               ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIavisituses
                                {-# LINE 6890 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOchildTypes =
                               ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIchildTypes
                                {-# LINE 6896 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOchildintros =
                               ({-# LINE 912 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIchildintros
                                {-# LINE 6902 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOfollow =
                               ({-# LINE 836 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIfollow
                                {-# LINE 6908 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOindex =
                               ({-# LINE 875 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIindex
                                {-# LINE 6914 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOmrules =
                               ({-# LINE 835 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsImrules
                                {-# LINE 6920 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOoptions =
                               ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIoptions
                                {-# LINE 6926 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOprevMaxSimRefs =
                               ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIprevMaxSimRefs
                                {-# LINE 6932 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOruledefs =
                               ({-# LINE 1281 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIruledefs
                                {-# LINE 6938 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOruleuses =
                               ({-# LINE 1282 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIruleuses
                                {-# LINE 6944 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOuseParallel =
                               ({-# LINE 903 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIuseParallel
                                {-# LINE 6950 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           ( _stepsIdefs,_stepsIerrors,_stepsIindex,_stepsIisLast,_stepsIlazyIntras,_stepsIprevMaxSimRefs,_stepsIruleKinds,_stepsIruleUsage,_stepsIsem_steps,_stepsIsize,_stepsIuses,_stepsIvisitKinds) =
                               steps_ _stepsOallFromToStates _stepsOallInitStates _stepsOallVisitKinds _stepsOallchildvisit _stepsOavisitdefs _stepsOavisituses _stepsOchildTypes _stepsOchildintros _stepsOfollow _stepsOindex _stepsOkind _stepsOmrules _stepsOoptions _stepsOprevMaxSimRefs _stepsOruledefs _stepsOruleuses _stepsOuseParallel
                       in  ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOuses,_lhsOvisitKinds))))
sem_VisitStep_Sim :: T_VisitSteps ->
                     T_VisitStep
sem_VisitStep_Sim (T_VisitSteps steps_) =
    (T_VisitStep (\ _lhsIallFromToStates
                    _lhsIallInitStates
                    _lhsIallVisitKinds
                    _lhsIallchildvisit
                    _lhsIavisitdefs
                    _lhsIavisituses
                    _lhsIchildTypes
                    _lhsIchildintros
                    _lhsIfollow
                    _lhsIindex
                    _lhsIisLast
                    _lhsIkind
                    _lhsImrules
                    _lhsIoptions
                    _lhsIprevMaxSimRefs
                    _lhsIruledefs
                    _lhsIruleuses
                    _lhsIuseParallel ->
                      (let _stepsOindex :: Int
                           _lhsOindex :: Int
                           _lhsOprevMaxSimRefs :: Int
                           _lhsOdefs :: (Set String)
                           _lhsOerrors :: (Seq Error)
                           _lhsOlazyIntras :: (Set String)
                           _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                           _lhsOruleUsage :: (Map Identifier Int)
                           _lhsOsem_steps :: PP_Doc
                           _lhsOuses :: (Map String (Maybe NonLocalAttr))
                           _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                           _lhsOisLast :: Bool
                           _stepsOallFromToStates :: (Map VisitIdentifier (Int,Int))
                           _stepsOallInitStates :: (Map NontermIdent Int)
                           _stepsOallVisitKinds :: (Map VisitIdentifier VisitKind)
                           _stepsOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                           _stepsOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                           _stepsOavisituses :: (Map VisitIdentifier (Set Identifier))
                           _stepsOchildTypes :: (Map Identifier Type)
                           _stepsOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                           _stepsOfollow :: PP_Doc
                           _stepsOkind :: VisitKind
                           _stepsOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                           _stepsOoptions :: Options
                           _stepsOprevMaxSimRefs :: Int
                           _stepsOruledefs :: (Map Identifier (Set String))
                           _stepsOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                           _stepsOuseParallel :: Bool
                           _stepsIdefs :: (Set String)
                           _stepsIerrors :: (Seq Error)
                           _stepsIindex :: Int
                           _stepsIisLast :: Bool
                           _stepsIlazyIntras :: (Set String)
                           _stepsIprevMaxSimRefs :: Int
                           _stepsIruleKinds :: (Map Identifier (Set VisitKind))
                           _stepsIruleUsage :: (Map Identifier Int)
                           _stepsIsem_steps :: PP_Doc
                           _stepsIsize :: Int
                           _stepsIuses :: (Map String (Maybe NonLocalAttr))
                           _stepsIvisitKinds :: (Map VisitIdentifier VisitKind)
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 881, column 22)
                           _stepsOindex =
                               ({-# LINE 881 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                0
                                {-# LINE 7020 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 882, column 22)
                           _lhsOindex =
                               ({-# LINE 882 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIindex
                                {-# LINE 7026 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 889, column 3)
                           _lhsOprevMaxSimRefs =
                               ({-# LINE 889 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                if _useParallel
                                then _lhsIprevMaxSimRefs `max` (_stepsIindex - 1)
                                else _lhsIprevMaxSimRefs
                                {-# LINE 7034 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 905, column 22)
                           _useParallel =
                               ({-# LINE 905 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                parallelInvoke _lhsIoptions && _stepsIsize > 1
                                {-# LINE 7040 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1313, column 38)
                           _lhsOdefs =
                               ({-# LINE 1313 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIdefs
                                {-# LINE 7046 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                           _lhsOerrors =
                               ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIerrors
                                {-# LINE 7052 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                           _lhsOlazyIntras =
                               ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIlazyIntras
                                {-# LINE 7058 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                           _lhsOruleKinds =
                               ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIruleKinds
                                {-# LINE 7064 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                           _lhsOruleUsage =
                               ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIruleUsage
                                {-# LINE 7070 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 836, column 59)
                           _lhsOsem_steps =
                               ({-# LINE 836 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIsem_steps
                                {-# LINE 7076 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1314, column 38)
                           _lhsOuses =
                               ({-# LINE 1314 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIuses
                                {-# LINE 7082 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                           _lhsOvisitKinds =
                               ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIvisitKinds
                                {-# LINE 7088 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (up)
                           _lhsOisLast =
                               ({-# LINE 894 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _stepsIisLast
                                {-# LINE 7094 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallFromToStates =
                               ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallFromToStates
                                {-# LINE 7100 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallInitStates =
                               ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallInitStates
                                {-# LINE 7106 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallVisitKinds =
                               ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallVisitKinds
                                {-# LINE 7112 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOallchildvisit =
                               ({-# LINE 1149 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIallchildvisit
                                {-# LINE 7118 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOavisitdefs =
                               ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIavisitdefs
                                {-# LINE 7124 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOavisituses =
                               ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIavisituses
                                {-# LINE 7130 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOchildTypes =
                               ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIchildTypes
                                {-# LINE 7136 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOchildintros =
                               ({-# LINE 912 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIchildintros
                                {-# LINE 7142 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOfollow =
                               ({-# LINE 836 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIfollow
                                {-# LINE 7148 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOkind =
                               ({-# LINE 827 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIkind
                                {-# LINE 7154 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOmrules =
                               ({-# LINE 835 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsImrules
                                {-# LINE 7160 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOoptions =
                               ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIoptions
                                {-# LINE 7166 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOprevMaxSimRefs =
                               ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIprevMaxSimRefs
                                {-# LINE 7172 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOruledefs =
                               ({-# LINE 1281 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIruledefs
                                {-# LINE 7178 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (down)
                           _stepsOruleuses =
                               ({-# LINE 1282 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIruleuses
                                {-# LINE 7184 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (from local)
                           _stepsOuseParallel =
                               ({-# LINE 903 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _useParallel
                                {-# LINE 7190 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           ( _stepsIdefs,_stepsIerrors,_stepsIindex,_stepsIisLast,_stepsIlazyIntras,_stepsIprevMaxSimRefs,_stepsIruleKinds,_stepsIruleUsage,_stepsIsem_steps,_stepsIsize,_stepsIuses,_stepsIvisitKinds) =
                               steps_ _stepsOallFromToStates _stepsOallInitStates _stepsOallVisitKinds _stepsOallchildvisit _stepsOavisitdefs _stepsOavisituses _stepsOchildTypes _stepsOchildintros _stepsOfollow _stepsOindex _stepsOkind _stepsOmrules _stepsOoptions _stepsOprevMaxSimRefs _stepsOruledefs _stepsOruleuses _stepsOuseParallel
                       in  ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOuses,_lhsOvisitKinds))))
sem_VisitStep_ChildIntro :: Identifier ->
                            T_VisitStep
sem_VisitStep_ChildIntro child_ =
    (T_VisitStep (\ _lhsIallFromToStates
                    _lhsIallInitStates
                    _lhsIallVisitKinds
                    _lhsIallchildvisit
                    _lhsIavisitdefs
                    _lhsIavisituses
                    _lhsIchildTypes
                    _lhsIchildintros
                    _lhsIfollow
                    _lhsIindex
                    _lhsIisLast
                    _lhsIkind
                    _lhsImrules
                    _lhsIoptions
                    _lhsIprevMaxSimRefs
                    _lhsIruledefs
                    _lhsIruleuses
                    _lhsIuseParallel ->
                      (let _lhsOerrors :: (Seq Error)
                           _lhsOdefs :: (Set String)
                           _lhsOuses :: (Map String (Maybe NonLocalAttr))
                           _lhsOsem_steps :: PP_Doc
                           _lhsOlazyIntras :: (Set String)
                           _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                           _lhsOruleUsage :: (Map Identifier Int)
                           _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                           _lhsOindex :: Int
                           _lhsOisLast :: Bool
                           _lhsOprevMaxSimRefs :: Int
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 850, column 16)
                           _attachItf =
                               ({-# LINE 850 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.findWithDefault (error $ "Child " ++ show child_ ++ " not found") child_ _lhsIchildintros
                                {-# LINE 7231 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 851, column 16)
                           (_lhsOerrors,_sem_steps,_lhsOdefs,_lhsOuses) =
                               ({-# LINE 851 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                case _attachItf     _lhsIkind of
                                  Left e                   -> (Seq.singleton e, empty, Set.empty, Map.empty)
                                  Right (code, defs, uses) -> (Seq.empty, code, defs, uses)
                                {-# LINE 7239 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- "./src-ag/ExecutionPlan2Caml.ag"(line 855, column 16)
                           _lhsOsem_steps =
                               ({-# LINE 855 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _sem_steps     >-< _lhsIfollow
                                {-# LINE 7245 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                           _lhsOlazyIntras =
                               ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Set.empty
                                {-# LINE 7251 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                           _lhsOruleKinds =
                               ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.empty
                                {-# LINE 7257 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                           _lhsOruleUsage =
                               ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                Map.empty
                                {-# LINE 7263 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                           _lhsOvisitKinds =
                               ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                mempty
                                {-# LINE 7269 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOindex =
                               ({-# LINE 875 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIindex
                                {-# LINE 7275 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOisLast =
                               ({-# LINE 894 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIisLast
                                {-# LINE 7281 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                           -- copy rule (chain)
                           _lhsOprevMaxSimRefs =
                               ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                _lhsIprevMaxSimRefs
                                {-# LINE 7287 "dist/build/ExecutionPlan2Caml.hs" #-}
                                )
                       in  ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOuses,_lhsOvisitKinds))))
-- VisitSteps --------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInitStates        : Map NontermIdent Int
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         childTypes           : Map Identifier Type
         childintros          : Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))
         follow               : PP_Doc
         kind                 : VisitKind
         mrules               : Map Identifier (VisitKind ->  Either Error PP_Doc)
         options              : Options
         ruledefs             : Map Identifier (Set String)
         ruleuses             : Map Identifier (Map String (Maybe NonLocalAttr))
         useParallel          : Bool
      chained attributes:
         index                : Int
         prevMaxSimRefs       : Int
      synthesized attributes:
         defs                 : Set String
         errors               : Seq Error
         isLast               : Bool
         lazyIntras           : Set String
         ruleKinds            : Map Identifier (Set VisitKind)
         ruleUsage            : Map Identifier Int
         sem_steps            : PP_Doc
         size                 : Int
         uses                 : Map String (Maybe NonLocalAttr)
         visitKinds           : Map VisitIdentifier VisitKind
   alternatives:
      alternative Cons:
         child hd             : VisitStep 
         child tl             : VisitSteps 
      alternative Nil:
-}
-- cata
sem_VisitSteps :: VisitSteps ->
                  T_VisitSteps
sem_VisitSteps list =
    (Prelude.foldr sem_VisitSteps_Cons sem_VisitSteps_Nil (Prelude.map sem_VisitStep list))
-- semantic domain
newtype T_VisitSteps = T_VisitSteps ((Map VisitIdentifier (Int,Int)) ->
                                     (Map NontermIdent Int) ->
                                     (Map VisitIdentifier VisitKind) ->
                                     (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                                     (Map VisitIdentifier (Set Identifier)) ->
                                     (Map VisitIdentifier (Set Identifier)) ->
                                     (Map Identifier Type) ->
                                     (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))) ->
                                     PP_Doc ->
                                     Int ->
                                     VisitKind ->
                                     (Map Identifier (VisitKind ->  Either Error PP_Doc)) ->
                                     Options ->
                                     Int ->
                                     (Map Identifier (Set String)) ->
                                     (Map Identifier (Map String (Maybe NonLocalAttr))) ->
                                     Bool ->
                                     ( (Set String),(Seq Error),Int,Bool,(Set String),Int,(Map Identifier (Set VisitKind)),(Map Identifier Int),PP_Doc,Int,(Map String (Maybe NonLocalAttr)),(Map VisitIdentifier VisitKind)))
data Inh_VisitSteps = Inh_VisitSteps {allFromToStates_Inh_VisitSteps :: (Map VisitIdentifier (Int,Int)),allInitStates_Inh_VisitSteps :: (Map NontermIdent Int),allVisitKinds_Inh_VisitSteps :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_VisitSteps :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),avisitdefs_Inh_VisitSteps :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_VisitSteps :: (Map VisitIdentifier (Set Identifier)),childTypes_Inh_VisitSteps :: (Map Identifier Type),childintros_Inh_VisitSteps :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),follow_Inh_VisitSteps :: PP_Doc,index_Inh_VisitSteps :: Int,kind_Inh_VisitSteps :: VisitKind,mrules_Inh_VisitSteps :: (Map Identifier (VisitKind ->  Either Error PP_Doc)),options_Inh_VisitSteps :: Options,prevMaxSimRefs_Inh_VisitSteps :: Int,ruledefs_Inh_VisitSteps :: (Map Identifier (Set String)),ruleuses_Inh_VisitSteps :: (Map Identifier (Map String (Maybe NonLocalAttr))),useParallel_Inh_VisitSteps :: Bool}
data Syn_VisitSteps = Syn_VisitSteps {defs_Syn_VisitSteps :: (Set String),errors_Syn_VisitSteps :: (Seq Error),index_Syn_VisitSteps :: Int,isLast_Syn_VisitSteps :: Bool,lazyIntras_Syn_VisitSteps :: (Set String),prevMaxSimRefs_Syn_VisitSteps :: Int,ruleKinds_Syn_VisitSteps :: (Map Identifier (Set VisitKind)),ruleUsage_Syn_VisitSteps :: (Map Identifier Int),sem_steps_Syn_VisitSteps :: PP_Doc,size_Syn_VisitSteps :: Int,uses_Syn_VisitSteps :: (Map String (Maybe NonLocalAttr)),visitKinds_Syn_VisitSteps :: (Map VisitIdentifier VisitKind)}
wrap_VisitSteps :: T_VisitSteps ->
                   Inh_VisitSteps ->
                   Syn_VisitSteps
wrap_VisitSteps (T_VisitSteps sem) (Inh_VisitSteps _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIfollow _lhsIindex _lhsIkind _lhsImrules _lhsIoptions _lhsIprevMaxSimRefs _lhsIruledefs _lhsIruleuses _lhsIuseParallel) =
    (let ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOsize,_lhsOuses,_lhsOvisitKinds) = sem _lhsIallFromToStates _lhsIallInitStates _lhsIallVisitKinds _lhsIallchildvisit _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIfollow _lhsIindex _lhsIkind _lhsImrules _lhsIoptions _lhsIprevMaxSimRefs _lhsIruledefs _lhsIruleuses _lhsIuseParallel
     in  (Syn_VisitSteps _lhsOdefs _lhsOerrors _lhsOindex _lhsOisLast _lhsOlazyIntras _lhsOprevMaxSimRefs _lhsOruleKinds _lhsOruleUsage _lhsOsem_steps _lhsOsize _lhsOuses _lhsOvisitKinds))
sem_VisitSteps_Cons :: T_VisitStep ->
                       T_VisitSteps ->
                       T_VisitSteps
sem_VisitSteps_Cons (T_VisitStep hd_) (T_VisitSteps tl_) =
    (T_VisitSteps (\ _lhsIallFromToStates
                     _lhsIallInitStates
                     _lhsIallVisitKinds
                     _lhsIallchildvisit
                     _lhsIavisitdefs
                     _lhsIavisituses
                     _lhsIchildTypes
                     _lhsIchildintros
                     _lhsIfollow
                     _lhsIindex
                     _lhsIkind
                     _lhsImrules
                     _lhsIoptions
                     _lhsIprevMaxSimRefs
                     _lhsIruledefs
                     _lhsIruleuses
                     _lhsIuseParallel ->
                       (let _hdOfollow :: PP_Doc
                            _lhsOsem_steps :: PP_Doc
                            _lhsOsize :: Int
                            _hdOindex :: Int
                            _tlOindex :: Int
                            _lhsOindex :: Int
                            _lhsOisLast :: Bool
                            _hdOisLast :: Bool
                            _lhsOdefs :: (Set String)
                            _lhsOerrors :: (Seq Error)
                            _lhsOlazyIntras :: (Set String)
                            _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                            _lhsOruleUsage :: (Map Identifier Int)
                            _lhsOuses :: (Map String (Maybe NonLocalAttr))
                            _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                            _lhsOprevMaxSimRefs :: Int
                            _hdOallFromToStates :: (Map VisitIdentifier (Int,Int))
                            _hdOallInitStates :: (Map NontermIdent Int)
                            _hdOallVisitKinds :: (Map VisitIdentifier VisitKind)
                            _hdOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                            _hdOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                            _hdOavisituses :: (Map VisitIdentifier (Set Identifier))
                            _hdOchildTypes :: (Map Identifier Type)
                            _hdOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                            _hdOkind :: VisitKind
                            _hdOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                            _hdOoptions :: Options
                            _hdOprevMaxSimRefs :: Int
                            _hdOruledefs :: (Map Identifier (Set String))
                            _hdOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                            _hdOuseParallel :: Bool
                            _tlOallFromToStates :: (Map VisitIdentifier (Int,Int))
                            _tlOallInitStates :: (Map NontermIdent Int)
                            _tlOallVisitKinds :: (Map VisitIdentifier VisitKind)
                            _tlOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                            _tlOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                            _tlOavisituses :: (Map VisitIdentifier (Set Identifier))
                            _tlOchildTypes :: (Map Identifier Type)
                            _tlOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                            _tlOfollow :: PP_Doc
                            _tlOkind :: VisitKind
                            _tlOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                            _tlOoptions :: Options
                            _tlOprevMaxSimRefs :: Int
                            _tlOruledefs :: (Map Identifier (Set String))
                            _tlOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                            _tlOuseParallel :: Bool
                            _hdIdefs :: (Set String)
                            _hdIerrors :: (Seq Error)
                            _hdIindex :: Int
                            _hdIisLast :: Bool
                            _hdIlazyIntras :: (Set String)
                            _hdIprevMaxSimRefs :: Int
                            _hdIruleKinds :: (Map Identifier (Set VisitKind))
                            _hdIruleUsage :: (Map Identifier Int)
                            _hdIsem_steps :: PP_Doc
                            _hdIuses :: (Map String (Maybe NonLocalAttr))
                            _hdIvisitKinds :: (Map VisitIdentifier VisitKind)
                            _tlIdefs :: (Set String)
                            _tlIerrors :: (Seq Error)
                            _tlIindex :: Int
                            _tlIisLast :: Bool
                            _tlIlazyIntras :: (Set String)
                            _tlIprevMaxSimRefs :: Int
                            _tlIruleKinds :: (Map Identifier (Set VisitKind))
                            _tlIruleUsage :: (Map Identifier Int)
                            _tlIsem_steps :: PP_Doc
                            _tlIsize :: Int
                            _tlIuses :: (Map String (Maybe NonLocalAttr))
                            _tlIvisitKinds :: (Map VisitIdentifier VisitKind)
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 840, column 11)
                            _hdOfollow =
                                ({-# LINE 840 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _tlIsem_steps
                                 {-# LINE 7456 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 841, column 11)
                            _lhsOsem_steps =
                                ({-# LINE 841 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIsem_steps
                                 {-# LINE 7462 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 872, column 10)
                            _lhsOsize =
                                ({-# LINE 872 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 1 + _tlIsize
                                 {-# LINE 7468 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 877, column 3)
                            _hdOindex =
                                ({-# LINE 877 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIindex
                                 {-# LINE 7474 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 878, column 3)
                            _tlOindex =
                                ({-# LINE 878 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 1 + _lhsIindex
                                 {-# LINE 7480 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 879, column 3)
                            _lhsOindex =
                                ({-# LINE 879 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _tlIindex
                                 {-# LINE 7486 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 898, column 11)
                            _lhsOisLast =
                                ({-# LINE 898 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 False
                                 {-# LINE 7492 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 899, column 11)
                            _hdOisLast =
                                ({-# LINE 899 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _tlIisLast
                                 {-# LINE 7498 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1313, column 38)
                            _lhsOdefs =
                                ({-# LINE 1313 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIdefs `Set.union` _tlIdefs
                                 {-# LINE 7504 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                            _lhsOerrors =
                                ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIerrors Seq.>< _tlIerrors
                                 {-# LINE 7510 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                            _lhsOlazyIntras =
                                ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIlazyIntras `Set.union` _tlIlazyIntras
                                 {-# LINE 7516 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                            _lhsOruleKinds =
                                ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIruleKinds `unionWithMappend` _tlIruleKinds
                                 {-# LINE 7522 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                            _lhsOruleUsage =
                                ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIruleUsage `unionWithSum` _tlIruleUsage
                                 {-# LINE 7528 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1314, column 38)
                            _lhsOuses =
                                ({-# LINE 1314 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIuses `Map.union` _tlIuses
                                 {-# LINE 7534 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                            _lhsOvisitKinds =
                                ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIvisitKinds `mappend` _tlIvisitKinds
                                 {-# LINE 7540 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (up)
                            _lhsOprevMaxSimRefs =
                                ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _tlIprevMaxSimRefs
                                 {-# LINE 7546 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOallFromToStates =
                                ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallFromToStates
                                 {-# LINE 7552 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOallInitStates =
                                ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallInitStates
                                 {-# LINE 7558 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOallVisitKinds =
                                ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallVisitKinds
                                 {-# LINE 7564 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOallchildvisit =
                                ({-# LINE 1149 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallchildvisit
                                 {-# LINE 7570 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOavisitdefs =
                                ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIavisitdefs
                                 {-# LINE 7576 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOavisituses =
                                ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIavisituses
                                 {-# LINE 7582 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOchildTypes =
                                ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIchildTypes
                                 {-# LINE 7588 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOchildintros =
                                ({-# LINE 912 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIchildintros
                                 {-# LINE 7594 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOkind =
                                ({-# LINE 827 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIkind
                                 {-# LINE 7600 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOmrules =
                                ({-# LINE 835 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsImrules
                                 {-# LINE 7606 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOoptions =
                                ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIoptions
                                 {-# LINE 7612 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOprevMaxSimRefs =
                                ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIprevMaxSimRefs
                                 {-# LINE 7618 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOruledefs =
                                ({-# LINE 1281 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIruledefs
                                 {-# LINE 7624 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOruleuses =
                                ({-# LINE 1282 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIruleuses
                                 {-# LINE 7630 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _hdOuseParallel =
                                ({-# LINE 903 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIuseParallel
                                 {-# LINE 7636 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOallFromToStates =
                                ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallFromToStates
                                 {-# LINE 7642 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOallInitStates =
                                ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallInitStates
                                 {-# LINE 7648 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOallVisitKinds =
                                ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallVisitKinds
                                 {-# LINE 7654 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOallchildvisit =
                                ({-# LINE 1149 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIallchildvisit
                                 {-# LINE 7660 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOavisitdefs =
                                ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIavisitdefs
                                 {-# LINE 7666 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOavisituses =
                                ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIavisituses
                                 {-# LINE 7672 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOchildTypes =
                                ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIchildTypes
                                 {-# LINE 7678 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOchildintros =
                                ({-# LINE 912 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIchildintros
                                 {-# LINE 7684 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOfollow =
                                ({-# LINE 836 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIfollow
                                 {-# LINE 7690 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOkind =
                                ({-# LINE 827 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIkind
                                 {-# LINE 7696 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOmrules =
                                ({-# LINE 835 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsImrules
                                 {-# LINE 7702 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOoptions =
                                ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIoptions
                                 {-# LINE 7708 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (chain)
                            _tlOprevMaxSimRefs =
                                ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _hdIprevMaxSimRefs
                                 {-# LINE 7714 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOruledefs =
                                ({-# LINE 1281 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIruledefs
                                 {-# LINE 7720 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOruleuses =
                                ({-# LINE 1282 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIruleuses
                                 {-# LINE 7726 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (down)
                            _tlOuseParallel =
                                ({-# LINE 903 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIuseParallel
                                 {-# LINE 7732 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            ( _hdIdefs,_hdIerrors,_hdIindex,_hdIisLast,_hdIlazyIntras,_hdIprevMaxSimRefs,_hdIruleKinds,_hdIruleUsage,_hdIsem_steps,_hdIuses,_hdIvisitKinds) =
                                hd_ _hdOallFromToStates _hdOallInitStates _hdOallVisitKinds _hdOallchildvisit _hdOavisitdefs _hdOavisituses _hdOchildTypes _hdOchildintros _hdOfollow _hdOindex _hdOisLast _hdOkind _hdOmrules _hdOoptions _hdOprevMaxSimRefs _hdOruledefs _hdOruleuses _hdOuseParallel
                            ( _tlIdefs,_tlIerrors,_tlIindex,_tlIisLast,_tlIlazyIntras,_tlIprevMaxSimRefs,_tlIruleKinds,_tlIruleUsage,_tlIsem_steps,_tlIsize,_tlIuses,_tlIvisitKinds) =
                                tl_ _tlOallFromToStates _tlOallInitStates _tlOallVisitKinds _tlOallchildvisit _tlOavisitdefs _tlOavisituses _tlOchildTypes _tlOchildintros _tlOfollow _tlOindex _tlOkind _tlOmrules _tlOoptions _tlOprevMaxSimRefs _tlOruledefs _tlOruleuses _tlOuseParallel
                        in  ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOsize,_lhsOuses,_lhsOvisitKinds))))
sem_VisitSteps_Nil :: T_VisitSteps
sem_VisitSteps_Nil =
    (T_VisitSteps (\ _lhsIallFromToStates
                     _lhsIallInitStates
                     _lhsIallVisitKinds
                     _lhsIallchildvisit
                     _lhsIavisitdefs
                     _lhsIavisituses
                     _lhsIchildTypes
                     _lhsIchildintros
                     _lhsIfollow
                     _lhsIindex
                     _lhsIkind
                     _lhsImrules
                     _lhsIoptions
                     _lhsIprevMaxSimRefs
                     _lhsIruledefs
                     _lhsIruleuses
                     _lhsIuseParallel ->
                       (let _lhsOsem_steps :: PP_Doc
                            _lhsOsize :: Int
                            _lhsOisLast :: Bool
                            _lhsOdefs :: (Set String)
                            _lhsOerrors :: (Seq Error)
                            _lhsOlazyIntras :: (Set String)
                            _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                            _lhsOruleUsage :: (Map Identifier Int)
                            _lhsOuses :: (Map String (Maybe NonLocalAttr))
                            _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                            _lhsOindex :: Int
                            _lhsOprevMaxSimRefs :: Int
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 842, column 11)
                            _lhsOsem_steps =
                                ({-# LINE 842 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIfollow
                                 {-# LINE 7774 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 871, column 10)
                            _lhsOsize =
                                ({-# LINE 871 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 0
                                 {-# LINE 7780 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- "./src-ag/ExecutionPlan2Caml.ag"(line 897, column 11)
                            _lhsOisLast =
                                ({-# LINE 897 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 True
                                 {-# LINE 7786 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1313, column 38)
                            _lhsOdefs =
                                ({-# LINE 1313 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 Set.empty
                                 {-# LINE 7792 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                            _lhsOerrors =
                                ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 Seq.empty
                                 {-# LINE 7798 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                            _lhsOlazyIntras =
                                ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 Set.empty
                                 {-# LINE 7804 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                            _lhsOruleKinds =
                                ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 Map.empty
                                 {-# LINE 7810 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                            _lhsOruleUsage =
                                ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 Map.empty
                                 {-# LINE 7816 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1314, column 38)
                            _lhsOuses =
                                ({-# LINE 1314 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 Map.empty
                                 {-# LINE 7822 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                            _lhsOvisitKinds =
                                ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 mempty
                                 {-# LINE 7828 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (chain)
                            _lhsOindex =
                                ({-# LINE 875 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIindex
                                 {-# LINE 7834 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                            -- copy rule (chain)
                            _lhsOprevMaxSimRefs =
                                ({-# LINE 886 "./src-ag/ExecutionPlan2Caml.ag" #-}
                                 _lhsIprevMaxSimRefs
                                 {-# LINE 7840 "dist/build/ExecutionPlan2Caml.hs" #-}
                                 )
                        in  ( _lhsOdefs,_lhsOerrors,_lhsOindex,_lhsOisLast,_lhsOlazyIntras,_lhsOprevMaxSimRefs,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_steps,_lhsOsize,_lhsOuses,_lhsOvisitKinds))))
-- Visits ------------------------------------------------------
{-
   visit 0:
      inherited attributes:
         allFromToStates      : Map VisitIdentifier (Int,Int)
         allInhmap            : Map NontermIdent Attributes
         allInitStates        : Map NontermIdent Int
         allSynmap            : Map NontermIdent Attributes
         allVisitKinds        : Map VisitIdentifier VisitKind
         allchildvisit        : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         allintramap          : Map StateIdentifier (Map String (Maybe NonLocalAttr))
         avisitdefs           : Map VisitIdentifier (Set Identifier)
         avisituses           : Map VisitIdentifier (Set Identifier)
         childTypes           : Map Identifier Type
         childintros          : Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))
         con                  : ConstructorIdent
         inhmap               : Attributes
         mrules               : Map Identifier (VisitKind ->  Either Error PP_Doc)
         nextVisits           : Map StateIdentifier StateCtx
         nt                   : NontermIdent
         options              : Options
         params               : [Identifier]
         prevVisits           : Map StateIdentifier StateCtx
         ruledefs             : Map Identifier (Set String)
         ruleuses             : Map Identifier (Map String (Maybe NonLocalAttr))
         synmap               : Attributes
         terminaldefs         : Set String
      synthesized attributes:
         allvisits            : [VisitStateState]
         childvisit           : Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)
         errors               : Seq Error
         fromToStates         : Map VisitIdentifier (Int,Int)
         intramap             : Map StateIdentifier (Map String (Maybe NonLocalAttr))
         lazyIntras           : Set String
         ruleKinds            : Map Identifier (Set VisitKind)
         ruleUsage            : Map Identifier Int
         sem_visit            :  [(StateIdentifier,PP_Doc)] 
         t_visits             : PP_Doc
         visitKinds           : Map VisitIdentifier VisitKind
         visitdefs            : Map VisitIdentifier (Set Identifier)
         visituses            : Map VisitIdentifier (Set Identifier)
   alternatives:
      alternative Cons:
         child hd             : Visit 
         child tl             : Visits 
      alternative Nil:
-}
-- cata
sem_Visits :: Visits ->
              T_Visits
sem_Visits list =
    (Prelude.foldr sem_Visits_Cons sem_Visits_Nil (Prelude.map sem_Visit list))
-- semantic domain
newtype T_Visits = T_Visits ((Map VisitIdentifier (Int,Int)) ->
                             (Map NontermIdent Attributes) ->
                             (Map NontermIdent Int) ->
                             (Map NontermIdent Attributes) ->
                             (Map VisitIdentifier VisitKind) ->
                             (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)) ->
                             (Map StateIdentifier (Map String (Maybe NonLocalAttr))) ->
                             (Map VisitIdentifier (Set Identifier)) ->
                             (Map VisitIdentifier (Set Identifier)) ->
                             (Map Identifier Type) ->
                             (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))) ->
                             ConstructorIdent ->
                             Attributes ->
                             (Map Identifier (VisitKind ->  Either Error PP_Doc)) ->
                             (Map StateIdentifier StateCtx) ->
                             NontermIdent ->
                             Options ->
                             ([Identifier]) ->
                             (Map StateIdentifier StateCtx) ->
                             (Map Identifier (Set String)) ->
                             (Map Identifier (Map String (Maybe NonLocalAttr))) ->
                             Attributes ->
                             (Set String) ->
                             ( ([VisitStateState]),(Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),(Seq Error),(Map VisitIdentifier (Int,Int)),(Map StateIdentifier (Map String (Maybe NonLocalAttr))),(Set String),(Map Identifier (Set VisitKind)),(Map Identifier Int),( [(StateIdentifier,PP_Doc)] ),PP_Doc,(Map VisitIdentifier VisitKind),(Map VisitIdentifier (Set Identifier)),(Map VisitIdentifier (Set Identifier))))
data Inh_Visits = Inh_Visits {allFromToStates_Inh_Visits :: (Map VisitIdentifier (Int,Int)),allInhmap_Inh_Visits :: (Map NontermIdent Attributes),allInitStates_Inh_Visits :: (Map NontermIdent Int),allSynmap_Inh_Visits :: (Map NontermIdent Attributes),allVisitKinds_Inh_Visits :: (Map VisitIdentifier VisitKind),allchildvisit_Inh_Visits :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),allintramap_Inh_Visits :: (Map StateIdentifier (Map String (Maybe NonLocalAttr))),avisitdefs_Inh_Visits :: (Map VisitIdentifier (Set Identifier)),avisituses_Inh_Visits :: (Map VisitIdentifier (Set Identifier)),childTypes_Inh_Visits :: (Map Identifier Type),childintros_Inh_Visits :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr)))),con_Inh_Visits :: ConstructorIdent,inhmap_Inh_Visits :: Attributes,mrules_Inh_Visits :: (Map Identifier (VisitKind ->  Either Error PP_Doc)),nextVisits_Inh_Visits :: (Map StateIdentifier StateCtx),nt_Inh_Visits :: NontermIdent,options_Inh_Visits :: Options,params_Inh_Visits :: ([Identifier]),prevVisits_Inh_Visits :: (Map StateIdentifier StateCtx),ruledefs_Inh_Visits :: (Map Identifier (Set String)),ruleuses_Inh_Visits :: (Map Identifier (Map String (Maybe NonLocalAttr))),synmap_Inh_Visits :: Attributes,terminaldefs_Inh_Visits :: (Set String)}
data Syn_Visits = Syn_Visits {allvisits_Syn_Visits :: ([VisitStateState]),childvisit_Syn_Visits :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc)),errors_Syn_Visits :: (Seq Error),fromToStates_Syn_Visits :: (Map VisitIdentifier (Int,Int)),intramap_Syn_Visits :: (Map StateIdentifier (Map String (Maybe NonLocalAttr))),lazyIntras_Syn_Visits :: (Set String),ruleKinds_Syn_Visits :: (Map Identifier (Set VisitKind)),ruleUsage_Syn_Visits :: (Map Identifier Int),sem_visit_Syn_Visits :: ( [(StateIdentifier,PP_Doc)] ),t_visits_Syn_Visits :: PP_Doc,visitKinds_Syn_Visits :: (Map VisitIdentifier VisitKind),visitdefs_Syn_Visits :: (Map VisitIdentifier (Set Identifier)),visituses_Syn_Visits :: (Map VisitIdentifier (Set Identifier))}
wrap_Visits :: T_Visits ->
               Inh_Visits ->
               Syn_Visits
wrap_Visits (T_Visits sem) (Inh_Visits _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIcon _lhsIinhmap _lhsImrules _lhsInextVisits _lhsInt _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs) =
    (let ( _lhsOallvisits,_lhsOchildvisit,_lhsOerrors,_lhsOfromToStates,_lhsOintramap,_lhsOlazyIntras,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_visit,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses) = sem _lhsIallFromToStates _lhsIallInhmap _lhsIallInitStates _lhsIallSynmap _lhsIallVisitKinds _lhsIallchildvisit _lhsIallintramap _lhsIavisitdefs _lhsIavisituses _lhsIchildTypes _lhsIchildintros _lhsIcon _lhsIinhmap _lhsImrules _lhsInextVisits _lhsInt _lhsIoptions _lhsIparams _lhsIprevVisits _lhsIruledefs _lhsIruleuses _lhsIsynmap _lhsIterminaldefs
     in  (Syn_Visits _lhsOallvisits _lhsOchildvisit _lhsOerrors _lhsOfromToStates _lhsOintramap _lhsOlazyIntras _lhsOruleKinds _lhsOruleUsage _lhsOsem_visit _lhsOt_visits _lhsOvisitKinds _lhsOvisitdefs _lhsOvisituses))
sem_Visits_Cons :: T_Visit ->
                   T_Visits ->
                   T_Visits
sem_Visits_Cons (T_Visit hd_) (T_Visits tl_) =
    (T_Visits (\ _lhsIallFromToStates
                 _lhsIallInhmap
                 _lhsIallInitStates
                 _lhsIallSynmap
                 _lhsIallVisitKinds
                 _lhsIallchildvisit
                 _lhsIallintramap
                 _lhsIavisitdefs
                 _lhsIavisituses
                 _lhsIchildTypes
                 _lhsIchildintros
                 _lhsIcon
                 _lhsIinhmap
                 _lhsImrules
                 _lhsInextVisits
                 _lhsInt
                 _lhsIoptions
                 _lhsIparams
                 _lhsIprevVisits
                 _lhsIruledefs
                 _lhsIruleuses
                 _lhsIsynmap
                 _lhsIterminaldefs ->
                   (let _lhsOallvisits :: ([VisitStateState])
                        _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                        _lhsOerrors :: (Seq Error)
                        _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                        _lhsOintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                        _lhsOlazyIntras :: (Set String)
                        _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                        _lhsOruleUsage :: (Map Identifier Int)
                        _lhsOsem_visit :: ( [(StateIdentifier,PP_Doc)] )
                        _lhsOt_visits :: PP_Doc
                        _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                        _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                        _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                        _hdOallFromToStates :: (Map VisitIdentifier (Int,Int))
                        _hdOallInhmap :: (Map NontermIdent Attributes)
                        _hdOallInitStates :: (Map NontermIdent Int)
                        _hdOallSynmap :: (Map NontermIdent Attributes)
                        _hdOallVisitKinds :: (Map VisitIdentifier VisitKind)
                        _hdOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                        _hdOallintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                        _hdOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                        _hdOavisituses :: (Map VisitIdentifier (Set Identifier))
                        _hdOchildTypes :: (Map Identifier Type)
                        _hdOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                        _hdOcon :: ConstructorIdent
                        _hdOinhmap :: Attributes
                        _hdOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                        _hdOnextVisits :: (Map StateIdentifier StateCtx)
                        _hdOnt :: NontermIdent
                        _hdOoptions :: Options
                        _hdOparams :: ([Identifier])
                        _hdOprevVisits :: (Map StateIdentifier StateCtx)
                        _hdOruledefs :: (Map Identifier (Set String))
                        _hdOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                        _hdOsynmap :: Attributes
                        _hdOterminaldefs :: (Set String)
                        _tlOallFromToStates :: (Map VisitIdentifier (Int,Int))
                        _tlOallInhmap :: (Map NontermIdent Attributes)
                        _tlOallInitStates :: (Map NontermIdent Int)
                        _tlOallSynmap :: (Map NontermIdent Attributes)
                        _tlOallVisitKinds :: (Map VisitIdentifier VisitKind)
                        _tlOallchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                        _tlOallintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                        _tlOavisitdefs :: (Map VisitIdentifier (Set Identifier))
                        _tlOavisituses :: (Map VisitIdentifier (Set Identifier))
                        _tlOchildTypes :: (Map Identifier Type)
                        _tlOchildintros :: (Map Identifier (VisitKind -> Either Error (PP_Doc, Set String, Map String (Maybe NonLocalAttr))))
                        _tlOcon :: ConstructorIdent
                        _tlOinhmap :: Attributes
                        _tlOmrules :: (Map Identifier (VisitKind ->  Either Error PP_Doc))
                        _tlOnextVisits :: (Map StateIdentifier StateCtx)
                        _tlOnt :: NontermIdent
                        _tlOoptions :: Options
                        _tlOparams :: ([Identifier])
                        _tlOprevVisits :: (Map StateIdentifier StateCtx)
                        _tlOruledefs :: (Map Identifier (Set String))
                        _tlOruleuses :: (Map Identifier (Map String (Maybe NonLocalAttr)))
                        _tlOsynmap :: Attributes
                        _tlOterminaldefs :: (Set String)
                        _hdIallvisits :: ( VisitStateState )
                        _hdIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                        _hdIerrors :: (Seq Error)
                        _hdIfromToStates :: (Map VisitIdentifier (Int,Int))
                        _hdIintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                        _hdIlazyIntras :: (Set String)
                        _hdIruleKinds :: (Map Identifier (Set VisitKind))
                        _hdIruleUsage :: (Map Identifier Int)
                        _hdIsem_visit :: (  (StateIdentifier,PP_Doc)  )
                        _hdIt_visits :: PP_Doc
                        _hdIvisitKinds :: (Map VisitIdentifier VisitKind)
                        _hdIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                        _hdIvisituses :: (Map VisitIdentifier (Set Identifier))
                        _tlIallvisits :: ([VisitStateState])
                        _tlIchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                        _tlIerrors :: (Seq Error)
                        _tlIfromToStates :: (Map VisitIdentifier (Int,Int))
                        _tlIintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                        _tlIlazyIntras :: (Set String)
                        _tlIruleKinds :: (Map Identifier (Set VisitKind))
                        _tlIruleUsage :: (Map Identifier Int)
                        _tlIsem_visit :: ( [(StateIdentifier,PP_Doc)] )
                        _tlIt_visits :: PP_Doc
                        _tlIvisitKinds :: (Map VisitIdentifier VisitKind)
                        _tlIvisitdefs :: (Map VisitIdentifier (Set Identifier))
                        _tlIvisituses :: (Map VisitIdentifier (Set Identifier))
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 427, column 29)
                        _lhsOallvisits =
                            ({-# LINE 427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIallvisits : _tlIallvisits
                             {-# LINE 8044 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                        _lhsOchildvisit =
                            ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIchildvisit `Map.union` _tlIchildvisit
                             {-# LINE 8050 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                        _lhsOerrors =
                            ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIerrors Seq.>< _tlIerrors
                             {-# LINE 8056 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                        _lhsOfromToStates =
                            ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIfromToStates `mappend` _tlIfromToStates
                             {-# LINE 8062 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1255, column 34)
                        _lhsOintramap =
                            ({-# LINE 1255 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIintramap `uwMapUnion` _tlIintramap
                             {-# LINE 8068 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                        _lhsOlazyIntras =
                            ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIlazyIntras `Set.union` _tlIlazyIntras
                             {-# LINE 8074 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                        _lhsOruleKinds =
                            ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIruleKinds `unionWithMappend` _tlIruleKinds
                             {-# LINE 8080 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                        _lhsOruleUsage =
                            ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIruleUsage `unionWithSum` _tlIruleUsage
                             {-# LINE 8086 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 791, column 29)
                        _lhsOsem_visit =
                            ({-# LINE 791 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIsem_visit : _tlIsem_visit
                             {-# LINE 8092 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 527, column 59)
                        _lhsOt_visits =
                            ({-# LINE 527 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIt_visits >-< _tlIt_visits
                             {-# LINE 8098 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                        _lhsOvisitKinds =
                            ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIvisitKinds `mappend` _tlIvisitKinds
                             {-# LINE 8104 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                        _lhsOvisitdefs =
                            ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIvisitdefs `uwSetUnion` _tlIvisitdefs
                             {-# LINE 8110 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                        _lhsOvisituses =
                            ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _hdIvisituses `uwSetUnion` _tlIvisituses
                             {-# LINE 8116 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallFromToStates =
                            ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallFromToStates
                             {-# LINE 8122 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallInhmap =
                            ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallInhmap
                             {-# LINE 8128 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallInitStates =
                            ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallInitStates
                             {-# LINE 8134 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallSynmap =
                            ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallSynmap
                             {-# LINE 8140 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallVisitKinds =
                            ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallVisitKinds
                             {-# LINE 8146 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallchildvisit =
                            ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallchildvisit
                             {-# LINE 8152 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOallintramap =
                            ({-# LINE 1254 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallintramap
                             {-# LINE 8158 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOavisitdefs =
                            ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIavisitdefs
                             {-# LINE 8164 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOavisituses =
                            ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIavisituses
                             {-# LINE 8170 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOchildTypes =
                            ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIchildTypes
                             {-# LINE 8176 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOchildintros =
                            ({-# LINE 912 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIchildintros
                             {-# LINE 8182 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOcon =
                            ({-# LINE 86 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIcon
                             {-# LINE 8188 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOinhmap =
                            ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIinhmap
                             {-# LINE 8194 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOmrules =
                            ({-# LINE 835 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsImrules
                             {-# LINE 8200 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOnextVisits =
                            ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsInextVisits
                             {-# LINE 8206 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOnt =
                            ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsInt
                             {-# LINE 8212 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOoptions =
                            ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIoptions
                             {-# LINE 8218 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOparams =
                            ({-# LINE 92 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIparams
                             {-# LINE 8224 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOprevVisits =
                            ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIprevVisits
                             {-# LINE 8230 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOruledefs =
                            ({-# LINE 1281 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIruledefs
                             {-# LINE 8236 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOruleuses =
                            ({-# LINE 1282 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIruleuses
                             {-# LINE 8242 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOsynmap =
                            ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIsynmap
                             {-# LINE 8248 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _hdOterminaldefs =
                            ({-# LINE 1257 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIterminaldefs
                             {-# LINE 8254 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallFromToStates =
                            ({-# LINE 1396 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallFromToStates
                             {-# LINE 8260 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallInhmap =
                            ({-# LINE 412 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallInhmap
                             {-# LINE 8266 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallInitStates =
                            ({-# LINE 1454 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallInitStates
                             {-# LINE 8272 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallSynmap =
                            ({-# LINE 413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallSynmap
                             {-# LINE 8278 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallVisitKinds =
                            ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallVisitKinds
                             {-# LINE 8284 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallchildvisit =
                            ({-# LINE 1146 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallchildvisit
                             {-# LINE 8290 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOallintramap =
                            ({-# LINE 1254 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIallintramap
                             {-# LINE 8296 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOavisitdefs =
                            ({-# LINE 1306 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIavisitdefs
                             {-# LINE 8302 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOavisituses =
                            ({-# LINE 1307 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIavisituses
                             {-# LINE 8308 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOchildTypes =
                            ({-# LINE 1413 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIchildTypes
                             {-# LINE 8314 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOchildintros =
                            ({-# LINE 912 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIchildintros
                             {-# LINE 8320 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOcon =
                            ({-# LINE 86 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIcon
                             {-# LINE 8326 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOinhmap =
                            ({-# LINE 410 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIinhmap
                             {-# LINE 8332 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOmrules =
                            ({-# LINE 835 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsImrules
                             {-# LINE 8338 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOnextVisits =
                            ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsInextVisits
                             {-# LINE 8344 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOnt =
                            ({-# LINE 82 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsInt
                             {-# LINE 8350 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOoptions =
                            ({-# LINE 72 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIoptions
                             {-# LINE 8356 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOparams =
                            ({-# LINE 92 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIparams
                             {-# LINE 8362 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOprevVisits =
                            ({-# LINE 1382 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIprevVisits
                             {-# LINE 8368 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOruledefs =
                            ({-# LINE 1281 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIruledefs
                             {-# LINE 8374 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOruleuses =
                            ({-# LINE 1282 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIruleuses
                             {-# LINE 8380 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOsynmap =
                            ({-# LINE 411 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIsynmap
                             {-# LINE 8386 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- copy rule (down)
                        _tlOterminaldefs =
                            ({-# LINE 1257 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             _lhsIterminaldefs
                             {-# LINE 8392 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        ( _hdIallvisits,_hdIchildvisit,_hdIerrors,_hdIfromToStates,_hdIintramap,_hdIlazyIntras,_hdIruleKinds,_hdIruleUsage,_hdIsem_visit,_hdIt_visits,_hdIvisitKinds,_hdIvisitdefs,_hdIvisituses) =
                            hd_ _hdOallFromToStates _hdOallInhmap _hdOallInitStates _hdOallSynmap _hdOallVisitKinds _hdOallchildvisit _hdOallintramap _hdOavisitdefs _hdOavisituses _hdOchildTypes _hdOchildintros _hdOcon _hdOinhmap _hdOmrules _hdOnextVisits _hdOnt _hdOoptions _hdOparams _hdOprevVisits _hdOruledefs _hdOruleuses _hdOsynmap _hdOterminaldefs
                        ( _tlIallvisits,_tlIchildvisit,_tlIerrors,_tlIfromToStates,_tlIintramap,_tlIlazyIntras,_tlIruleKinds,_tlIruleUsage,_tlIsem_visit,_tlIt_visits,_tlIvisitKinds,_tlIvisitdefs,_tlIvisituses) =
                            tl_ _tlOallFromToStates _tlOallInhmap _tlOallInitStates _tlOallSynmap _tlOallVisitKinds _tlOallchildvisit _tlOallintramap _tlOavisitdefs _tlOavisituses _tlOchildTypes _tlOchildintros _tlOcon _tlOinhmap _tlOmrules _tlOnextVisits _tlOnt _tlOoptions _tlOparams _tlOprevVisits _tlOruledefs _tlOruleuses _tlOsynmap _tlOterminaldefs
                    in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOerrors,_lhsOfromToStates,_lhsOintramap,_lhsOlazyIntras,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_visit,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))
sem_Visits_Nil :: T_Visits
sem_Visits_Nil =
    (T_Visits (\ _lhsIallFromToStates
                 _lhsIallInhmap
                 _lhsIallInitStates
                 _lhsIallSynmap
                 _lhsIallVisitKinds
                 _lhsIallchildvisit
                 _lhsIallintramap
                 _lhsIavisitdefs
                 _lhsIavisituses
                 _lhsIchildTypes
                 _lhsIchildintros
                 _lhsIcon
                 _lhsIinhmap
                 _lhsImrules
                 _lhsInextVisits
                 _lhsInt
                 _lhsIoptions
                 _lhsIparams
                 _lhsIprevVisits
                 _lhsIruledefs
                 _lhsIruleuses
                 _lhsIsynmap
                 _lhsIterminaldefs ->
                   (let _lhsOallvisits :: ([VisitStateState])
                        _lhsOchildvisit :: (Map VisitIdentifier (Identifier -> Type -> VisitKind -> PP_Doc -> Either Error PP_Doc))
                        _lhsOerrors :: (Seq Error)
                        _lhsOfromToStates :: (Map VisitIdentifier (Int,Int))
                        _lhsOintramap :: (Map StateIdentifier (Map String (Maybe NonLocalAttr)))
                        _lhsOlazyIntras :: (Set String)
                        _lhsOruleKinds :: (Map Identifier (Set VisitKind))
                        _lhsOruleUsage :: (Map Identifier Int)
                        _lhsOsem_visit :: ( [(StateIdentifier,PP_Doc)] )
                        _lhsOt_visits :: PP_Doc
                        _lhsOvisitKinds :: (Map VisitIdentifier VisitKind)
                        _lhsOvisitdefs :: (Map VisitIdentifier (Set Identifier))
                        _lhsOvisituses :: (Map VisitIdentifier (Set Identifier))
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 427, column 29)
                        _lhsOallvisits =
                            ({-# LINE 427 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             []
                             {-# LINE 8441 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1147, column 37)
                        _lhsOchildvisit =
                            ({-# LINE 1147 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 8447 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1478, column 132)
                        _lhsOerrors =
                            ({-# LINE 1478 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Seq.empty
                             {-# LINE 8453 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1393, column 22)
                        _lhsOfromToStates =
                            ({-# LINE 1393 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             mempty
                             {-# LINE 8459 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1255, column 34)
                        _lhsOintramap =
                            ({-# LINE 1255 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 8465 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1329, column 57)
                        _lhsOlazyIntras =
                            ({-# LINE 1329 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Set.empty
                             {-# LINE 8471 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1229, column 56)
                        _lhsOruleKinds =
                            ({-# LINE 1229 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 8477 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1217, column 56)
                        _lhsOruleUsage =
                            ({-# LINE 1217 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 8483 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 791, column 29)
                        _lhsOsem_visit =
                            ({-# LINE 791 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             []
                             {-# LINE 8489 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 527, column 59)
                        _lhsOt_visits =
                            ({-# LINE 527 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             empty
                             {-# LINE 8495 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1440, column 68)
                        _lhsOvisitKinds =
                            ({-# LINE 1440 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             mempty
                             {-# LINE 8501 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1296, column 36)
                        _lhsOvisitdefs =
                            ({-# LINE 1296 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 8507 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                        -- use rule "./src-ag/ExecutionPlan2Caml.ag"(line 1297, column 36)
                        _lhsOvisituses =
                            ({-# LINE 1297 "./src-ag/ExecutionPlan2Caml.ag" #-}
                             Map.empty
                             {-# LINE 8513 "dist/build/ExecutionPlan2Caml.hs" #-}
                             )
                    in  ( _lhsOallvisits,_lhsOchildvisit,_lhsOerrors,_lhsOfromToStates,_lhsOintramap,_lhsOlazyIntras,_lhsOruleKinds,_lhsOruleUsage,_lhsOsem_visit,_lhsOt_visits,_lhsOvisitKinds,_lhsOvisitdefs,_lhsOvisituses))))