úÎ#»‰      Safe-Inferred USince we want to get access to the individual parsers which recognise a consecutive Z piece of the input text we define a new data type, which lifts the underlying parsers b to the grammatical level, so they can be transformed, manipulated, and run in a piecewise way.  g is defined in such a way that we can always access the first parsers to be ran from such a structure.  We require that all the %s do not recognise the empty string. " These should be covered by the  in the  constructor.  The function mkGramM splits a simple parser into the possibly empty part and the non-empty part. B The non-empty part recognises a consecutive part of the input.  Here we use the functions getOneP and getZeroP2 which are provided in the uu-parsinglib package, < but they could easily be provided by other packages too.  The function   is a special version of  ^, which only starts a new instance of its right operand when the left operand cannot proceed.  This is used in the function pmManyS, where we want to merge as many instances of its argument, but no more than that.  The function   is the merging equivalent of 7. Instead of running its two arguments consecutively, } the input is split into parts which serve as input for the left operand and parts which are served to the right operand. mkParser converts a 6mar back into a parser, which can subsequenly be run.   is like  }, with the additional feature that we require separators between the components. Probably only useful in the permuting case. Run a sufficient number of p'4s in a merged fashion, but no more than necessary!! \The left hand side operand is gradually transformed so we get access to its first component &We define instances for the data type  for , ,  and ExtAlternative   H !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ    R      !"#$%&'()*+,--./012345567898:8;8<8=8>8?8?8@8A8A8B8C8C8D8E8E8F8G8G8H8I8I8J8K8K8L8M8MNOuu-interleaved-0.1.0.0Control.Applicative.Interleaved Splittable getNonPuregetPureAltBindSeqGrammkG<<||><||>mkPsepBygmListbase Data.MaybeMaybeControl.Applicative<*>$fApplicativeGram $fFunctorGramGHC.BaseFunctor Applicative Alternative insertSep $fMonadGram$fAlternativeGram $fFunctorAlt $fShowGram $fMonoidGramoptionalliftA3liftA2liftA<**><**>puremanysome<|>emptygetConstConst unwrapMonad WrapMonad WrappedMonad unwrapArrow WrapArrow WrappedArrow getZipListZipList Data.Functor<$> Data.Monoid<>mconcatmappendmemptyMonoidgetDualDualappEndoEndogetAllAllgetAnyAnygetSumSum getProductProductgetFirstFirstgetLastLast<$