bXК      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None&1246<=JKLM{The backtracking function, given our index pair, return a stream of backtracked results. (Return as in we are in a monad).~TODO Should this be "(Int,Int) -> m (SM.Stream Id b)" or are there cases where we'd like to have monadic effects on the "b"s?UThe backtracking table 'BTtbl" captures a DP table and the function used to fill it.The empty subword. Can not be part of a more complex RHS for obvious reasons: "S -> E S" doesn't make sense. Used in some grammars as the base case.3Used by the instances below for index calculations.only non-empty subwordsempty subwords allowed1For CORE-language, we have our own Arg-terminatorVery simple data ctor)Given the arguments, creates a stream of s.aThe stream element. Creates a type-level recursive data type containing the extracted arguments. .one element of the stream, recursively defined!-top-most index of the stream -- typically int"4complete, recursively defined argument of the stream#3Given a stream element, we extract the top-most idx$Cextract the recursively defined argument in a well-defined way for %The %R class. Combines the arguments into a stack before they are turned into a stream.XTo use, simply write "instance Build MyDataCtor" as we have sensible default instances.&'The stack of arguments we are building.')The default is for the left-most element.#Given an element, create the stack.k  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij;  !"#$%&'()*+,-./0123456789:k%&' !"#$ji.hgfe-dcb a`_^,] \/0[ZY+X12 WVU*TSRQ)PO34NML(KJ56789:IHGFEDCBA@?>=<;F    !"#$%&'/0123456789:;<=>?@ABCDEFGHIJKML(NOPRQ)STVU*WXZY+[\]_^,`abcdfe-ghji.56789 : None$23468=HJKLM Required by most  instances just before  is called.nGenerate stream from either one (DIM2 -> m cnt) or some combination of terminals derived from uses of nextTo.Creates the single step on the left which does nothing more then set the outermost indices to (i,j). This does not use the alpha/omega'svector-based cellsInstance of boxed array with vector-valued cells. We assume that we want to store multiple results for each cell. If the intent is to store one scalar result, use the t wrapper.This instance is a bit crazy, since the accessor is the current stream itself. No idea how efficient this is (need to squint at CORE), but I plan to use it for backtracking only.NTODO Using this instance tends to break to optimizer ;-) -- don't use it yet!Function with monadic t return value.Function with t return value.Immutable arrays.Mutable arrays..Pre-stream generation for deeply nested boxes.0the first two arguments from nextTo, monadic xs.Rtwo or more elements combined by NextTo (~~~), "xs" as anything, "ys" is monadic.Gklmnopqrstuvwxyz{|}~#the composite type of the argumentsthe original index  (Z:.i:.j)the stream we get out of itklmnopqrstuvwxyz{|}~5klmnopqrstuvwxyz{|}~NoneL BA monadic version of the function application combinator. Applies f which has a monadic effect..Pure function application combinator. Applies f" which is pure. The arguments to f , meaning t can be monadic, however! If both, xs and ys\ are streams of candidate answers, they can be combined here. The answer (or sort) type of xs and ys! has to be the same. Works like (++) for lists.Reduces a streams of answers to the type of stored answers. The resulting type could be scalar, which it will be for highest-performance algorithms, or it could be a subset of answers stored in some kind of data structure.Specialized version of choice function application, with a choice function that needs to know the subword index it is working on.;General function to create combinators. The left-hand side xs in xs comb ys will have a size between minL and maxL, while ys2 and /everything to its right will be guaranteed minR size.Create combinators which are to be used in the right-most position of a chain. 1st, they make sure that the second to last region has a size of at least minL:. 2nd, they constrain the last argument to a size between minR and maxR. xs +~+ ys with xs and ys- non-empty. The non-emptyness constraint on ysh works only for two arguments. With three or more arguments, a left-leaning combinator to the right of ys) is required to establish non-emptyness.ls ~~~ xs !-~+ ys" with xs having a size of one and ls3 further to the left having a size of one or more.xs +~-! ys ~~~ rs with ys having a size of one and rs, further to the right having a size of one. xs -~- ys! produces an answer only if both xs and ys1 have size one. The total size here then is two. Nonetuv~{|}yzxwtuvqrsnopklm         !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghiijkklmmnoopqrsstuvwxyz{|}~34569:;<=>?@ABCDEFGADPfusion-0.1.0.0ADP.Fusion.GAPlike ADP.FusionADP.Fusion.MonadicADP.Fusion.Monadic.InternalApplyFunapplyBTfunBTtblRestrictedRegionRRegionEmptyMTblTblTblType initDeltaIdxTransToNTransTotransToNNEChrArgZNoneMkStreamStreamConstraintmkStream mkStreamInner StreamElement StreamElm StreamTopIdx StreamArg getTopIdxgetArgBuild BuildStackbuildSeBTtbl SeResRegionSeEmptySeMTblSeTblSeChrSeNonemtblNmtblEtNtoEtEtoNbttblNbttblE<<<|||.....@~~% $fApply(->) $fApply(->)0 $fApply(->)1 $fApply(->)2 $fApply(->)3 $fApply(->)4 $fApply(->)5 $fApply(->)6 $fApply(->)7 $fApply(->)8 $fApply(->)9 $fApply(->)10 $fApply(->)11 $fApply(->)12 $fApply(->)13 $fBuild(,) $fMkStreamm:.TFCo:R:StreamElm:.$fStreamElement:. $fBuildBTtbl$fTransToNBTtbl$fMkStreamm:.0TFCo:R:StreamElm:.0$fStreamElement:.0$fBuildRestrictedRegion$fMkStreammEmptyTFCo:R:StreamElmEmpty$fStreamElementEmpty $fBuildEmpty$fMkStreamm:.1TFCo:R:StreamElm:.1$fStreamElement:.1 $fBuildMTbl$fTransToNMTbl$fMkStreamm:.2TFCo:R:StreamElm:.2$fStreamElement:.2 $fBuildTbl $fTransToNTbl $fTblTypeN $fTblTypeE$fMkStreamm:.3TFCo:R:StreamElm:.3$fStreamElement:.3 $fBuildChr$fMkStreammNoneTFCo:R:StreamElmNone$fStreamElementNoneVectMunVectMVectunVectScalarM unScalarMScalarunScalarIdx2Idx3Box ExtractValueAsorElem extractValue extractStreamextractStreamLast PreStreamGen preStreamGen StreamGen streamGensinglePreStreamGen#<<makeLeft_MinRightmakeMinLeft_Right-~++~--~~~~-+~--~~~+~+!-~++~-!-~-$fExtractValuemArr0$fExtractValuemMArr0$fExtractValuem(->)$fExtractValuem(->)0$fExtractValuem(->)1$fExtractValuemArr00$fExtractValuemMArr00$fPreStreamGenmBox(,,)$fPreStreamGenmBox(,,)0$fStreamGenmBox(,,)$fPreStreamGenmArr0(,,)$fPreStreamGenmMArr0(,,)$fPreStreamGenmArr0(,,)0$fPreStreamGenmMArr0(,,)0$fPreStreamGenm(->)(,,)$fPreStreamGenm(->)(,,)0$fPreStreamGenm(->)(,,)1$fPreStreamGenm(->)(,,)2$fStreamGenmArr0(,,)$fStreamGenmMArr0(,,)$fStreamGenmArr0(,,)0$fStreamGenmMArr0(,,)0$fStreamGenm(->)(,,)$fStreamGenm(->)(,,)0$fStreamGenm(->)(,,)1$fStreamGenm(->)(,,)2