cF      The class  combines two aspects. /Field of an aspect. It associates a production prd with a rule rule.  The class Def) is defined by induction over the record vals $ containing the new definitions.  The function / inserts each definition into the attribution  of the corresponding child.  The type ? states that a rule takes as input the synthesized attributes  of the children sc, and the inherited attributes of the parent ip and returns Z a function from the output constructed thus far (inherited attributes of the children 1 |ic| and synthesized attributes of the parent sp) to the extended output. 6Field of the record of attributions for the children.  A Family   contains a single attribution p for the parent and  a collection of attributions c for the children. Field of an attribution.  The function  1 adds the definition of a synthesized attribute.  It takes a label att. representing the name of the new attribute,  a value valC to be assigned to this attribute, and it builds a function which , updates the output constructed thus far.  The function  + introduces a new inherited attribute for " a collection of non-terminals. & It takes the following parameters:  att(: the attribute which is being defined,  ntsG: the non-terminals with which this attribute is being associated, and  vals=: a record labelled with child names and containing values, M describing how to compute the attribute being defined at each 2 of the applicable child positions. I It builds a function which updates the output constructed thus far.|| Composition of two rules.  Semantic function of a terminal  The function . takes the combined rules for a node and the 4 semantic functions of the children, and builds a ? function from the inherited attributes of the parent to its  synthesized attributes. A copyI rule copies an inherited attribute from the parent to all its children.  The function  takes the name of an attribute att and * an heterogeneous list of non-terminals nts, for which the attribute has to be defined, ' and generates a copy rule for this. A useA rule declares a synthesized attribute that collects information  from some of the children.  The function > takes the following arguments: the attribute to be defined, A the list of non-terminals for which the attribute is defined, = a monoidal operator which combines the attribute values, = and a unit value to be used in those cases where none of ( the children has such an attribute. In the chainB rule a value is threaded in a depth-first way through the tree, J being updated every now and then. For this we have chained attributes R (both inherited and synthesized). If a definition for a synthesized attribute T of the parent with this name is missing we look for the right-most child with a O synthesized attribute of this name. If we are missing a definition for one K of the children, we look for the right-most of its left siblings which > can provide such a value, and if we cannot find it there, 8 we look at the inherited attributes of the father.  The function ( defines an inherited attribute aspect. 4 It takes as arguments: the name of the attribute att,  the list nts2 of non-terminals where the attribute is defined,  the list cpys8 of productions where the copy rule has to be applied,  and a record ; containing the explicit definitions for some productions.  The function * defines a synthesized attribute aspect. =A chained attribute definition introduces both an inherited [ and a synthesized attribute. In this case the pattern to be applied is the chain rule. : !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?     @       !" !# !$ !% !& '( ') '* '+ ,- '. '/ 01 02 03 04 05 06 07 08 ,9 :;<=> !? !? '@ 0A 0B 0C 0D 0E 0F 0G HI HJ HK HL MN MO MP MQ :R :S :T :U :V :W :X :Y :Z :[ :\ :] :^ :_ :` :a :b :c :d :e :f :g :h :i :j :k :l :m :n :o :p qr qs qt qu qv qw qx qx qy qz q{ !| !} !~ ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! " # $ %&'&(&)&*+,+-+.+/+0+123454678797:7:7;7< = > ? @ A BCDCECFCGCHCICJCKCLCMCNCOCPCQCRCSCTCUCVCWCXCYCZC[C\C]C^C_C`&a&b&c&d&e&f&g&h&h&i&i&j&k&l&m&n&o&p&q&r&s&t&u&v&w&x&y&z&{&|&}&~&&++++++++222222222222222222222222      !"#$%&'()*+,-./012345678899:;<=>?@ABCDAspectAG-0.1.1 Data.AspectAGData.AspectAG.DeriveAtat defAspect attAspect.+.PrdRuleChiFamAttsyndefinhdefextsem_Litknitcopyusechain inhAspect synAspect chnAspectlhsdefattLabel attLabelsderiveAGComDefsdefsbase GHC.IOBasebindIOreturnIOfailIOthenIO assertErrorGHC.Basefail>>=>>returnControl.Monad.FixmfixMonadFunctor Data.TypeableTypeable Typeable1 Typeable2 Typeable3 Typeable4 Typeable5 Typeable6 Typeable7MonadFix Control.Monad MonadPlusghc-primGHC.Prim RealWorldIOfmapcast showsTypeRep mkTyConAppmkTyContypeOfTyConTypeRepGHC.STSTunsafeInterleaveSTfixSTrunST GHC.STRefSTRefnewSTRef readSTRef writeSTRefmzeromplus=<<sequence sequence_mapMmapM_guardfilterMforMforM_msum>=><=<foreverjoin mapAndUnzipMzipWithM zipWithM_foldMfoldM_ replicateM replicateM_whenunlessliftMliftM2liftM3liftM4liftM5ap GHC.ExceptionArithExceptionDenormal DivideByZeroLossOfPrecision UnderflowOverflow ErrorCall Exception toException fromExceptionIOMode ReadWriteMode AppendMode WriteModeReadMode IOErrorType IOExceptionIOErrorExitCode ExitFailure ExitSuccessArrayExceptionUndefinedElementIndexOutOfBoundsAsyncException UserInterrupt ThreadKilled HeapOverflow StackOverflowAssertionFailedDeadlockBlockedIndefinitelyBlockedOnDeadMVarIORef BufferModeBlockBuffering LineBuffering NoBufferingFilePathHandleMVarstToIO unsafeIOToST unsafeSTToIOunsafePerformIOunsafeInterleaveIOnewIORef readIORef writeIORefioError userErrorthrowIOblockunblockblockedevaluatetypeOf7typeOf6typeOf5typeOf4typeOf3typeOf2typeOf1 typeRepKeymkFunTy splitTyConApp funResultTymkAppTy typeRepTyCon typeRepArgs tyConString typeOfDefaulttypeOf1DefaulttypeOf2DefaulttypeOf3DefaulttypeOf4DefaulttypeOf5DefaulttypeOf6Defaultgcastgcast1gcast2 Data.IORef mkWeakIORef modifyIORefatomicModifyIORef Data.Functionfix Data.STRef modifySTRefIOArrayunsafeDupablePerformIO noDuplicate newIOArrayunsafeReadIOArrayunsafeWriteIOArray readIOArray writeIOArray InterruptedResourceVanished TimeExpiredUnsupportedOperation HardwareFaultInappropriateTypeInvalidArgument OtherError ProtocolError SystemErrorUnsatisfiedConstraints UserErrorPermissionDeniedIllegalOperationEOFResourceExhausted ResourceBusy NoSuchThing AlreadyExists ioe_handleioe_type ioe_locationioe_description ioe_filename HandleTypeReadWriteHandle AppendHandle WriteHandle ReadHandleSemiClosedHandle ClosedHandle BufferListBufferListCons BufferListNil BufferState WriteBuffer ReadBufferBufferbufBufbufRPtrbufWPtrbufSizebufState RawBufferHandle__haFDhaTypehaIsBin haIsStream haBufferModehaBuffer haBuffers haOtherSideFD DuplexHandle FileHandleunIOliftIOioToSTunsafeDupableInterleaveIObufferIsWritable bufferEmpty bufferFullisReadableHandleTypeisWritableHandleTypeisReadWriteHandleType boundsIOArray showHandleblockedOnDeadMVarblockedIndefinitely stackOverflow heapOverflow ioExceptioncatchExceptioncatchAnyuntangle HList-0.1.1Data.HList.GhcSyntax.<++..<..^..@..-.Data.HList.RecordhTPupdateAtLabel hRenameLabelhProjectByLabels2hDeleteAtLabelData.HList.TIP tipySplit tipyProject tipyUpdate tipyDeleteonTIPhExtend'Data.HList.HArray hSplitByHNats Data.HListconcrete#Data.HList.Variant unVariant mkVariantVarianthMaybiedHMaybied.!..=..*.:*::=::+:Data.HList.GhcRecord proxyTcName hFieldTcName recordTcName hConsTcName hNilTcNamenilLub hasNoProxies hUnproxyLabel ProxyFound HasNoProxiesnarrowMNarrowMnarrowM'NarrowM' narrowM'' NarrowM''narrowNarrow lubNarrow LubNarrowNilLubconsLubConsLubhLubHLubequivR RecordEquivequivR' RecordEquiv'hProjectByLabels recordLabels emptyRecordmkRecord newLVPair labelLVPair valueLVPairLVPairRecord HRLabelSet HLabelSet RecordLabelsshowComponentsShowComponents showLabel ShowLabelhLookupByLabelHasFieldhLookupByLabel' HasField'h2projectByLabelsH2ProjectByLabelsh2projectByLabels'H2ProjectByLabels' hLeftUnion HLeftUnionhLeftUnionBoolHLeftUnionBoolunionSR UnionSymRecunionSR' UnionSymRec'Data.HList.HZip HZippablehUnziphZipHZipData.HList.TICunTICmkTICTIC HTypeProxiedoneTruetupleemptyTIPunTIPmkTIPTIP HTypeIndexedData.HList.HTypeIndexedhSplitByProxieshProjectByProxies hUpdateAtTypehDeleteAtProxy hType2HNathDeleteManyCaseHDeleteManyCase HType2HNatHType2HNatCase hTypes2HNats HTypes2HNatsData.HList.HOccurs hOccursMany HOccursMany hOccursMany1 HOccursMany1 hOccursFst HOccursFsthOccursHOccurs TypeNotFoundhOccurs'HOccurs' hOccursBool HOccursBool hOccursOpt HOccursOpt TypeFound HOccursNothProjectHProjecthSinglehLength hLookupByHNat HLookupByHNat hDeleteAtHNat HDeleteAtHNat hUpdateAtHNat HUpdateAtHNathSplitByHNats'HSplitByHNats'hProjectByHNatsHProjectByHNatshProjectAwayByHNatsHProjectAwayByHNatshBetweenHBetweenhDiffHDiff hOrdMember HOrdMemberHLength HMaxLength HMinLength HSingletonData.HList.GhcExperimentsfunType hDeleteMany HDeleteManyIsTC1IsTC2Data.HList.HListPreludehFlaghRmTaghAddTaghTMemberhMemberhMap'hAppend'append'hMapM_hMapMhBuildhEndappendhConshNilHNilHConsHListhHeadHHeadhTailHTailhExtendHExtendhAppendHAppendhReverseHReverse hReverse' HReverse' naiveHReverse NaiveHReversehBuild'HBuild'applyApplyIdhFoldrHFoldrhMapHMaphMapOutHMapOut ApplyHConsHMap'HShowHSeq hStagedEq' HStagedEq'HNatsHSethFindHFindhFind'HFind'HMemberHMemberM HMemberM'HTMember hTIntersect HTIntersecthTIntersectBoolHTIntersectBool hList2List HList2ListtoHJustToHJust fromHJust FromHJustHAddTagHRmTaghSplitHSplitData.HList.FakePreludesubType typeEqFalse typeEqTrueunProxytoProxyproxyproxyEqtypeEqhLthEqhPredhSucchZerohFalsehTrueHTrueHFalseHBoolhAndHAndhOrHOrhCondHCondHZeroHSuccHNat hNat2Integral HNat2IntegralHNothingHJustHEq hStagedEq HStagedEqHLtTypeEqProxy TypeEqTrue TypeEqFalseSubTypeFail