Îõ³h&á†Á      !"#$%&'()*+,-./0123456789:;<=>?@Internal Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîôexonãMonoidally combine all elements in the list, appending the separator between each pair of elements. Data Type  , Internal Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîôÛexon0An intermediate representation for internal use.Internal Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîô£exon/The combined segments, either empty or a value.   Data Type  Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîôÇexonïThe parts of an interpolation quasiquote. Text is split at each whitespace and interpolation splice marked by #{ and }.Internal Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîô  exonÓThis class is responsible for combining segments of an interpolated string, allowing users to define their own rules for how the result is constructed. The default implementation converts each literal part with A and uses the result type's B to concatenate them.The raw parts are encoded as , getting combined into a .The default for * skips whitespace by encoding it into the  constructor Ï, which is a unit object. To change this behavior, it can be easily overridden: Ënewtype Thing = Thing String deriving newtype (IsString, Semigroup, Monoid, Show) instance Exon ExonDefault Thing where convertSegment = case Segment.String s -> Result (Thing s) Segment.Expression thing -> Result thing Segment.Whitespace _ -> Result (Thing " >>> ") insertWhitespace s1 ws s2 = appendSegment ExonDefault (appendSegment +ExonDefault s1 (Segment.Whitespace ws)) s2 exonƒThis check is used to allow empty expression segments to be skipped when they are empty. The default is to never skip expressions.exon Convert a  to a #. The default implementation uses A# and ignores whitespace, returning .exon Append a  to a #. The default implementation uses C.exonAppend whitespace and a  to a ù, i.e. joining two parts of the interpolation by whitespace. The default implementation ignores the whitespace, calling  with the second argument.exon›The entry point for concatenation, taking a list of segments parsed from the interpolation. The default implementation skips leading whitespace and calls  and  to concatenate.exonThe tag for the quoter  , keeping whitespace verbatim.exonThe tag for the default quoter  .exon Variant of $ that preserves whitespace verbatim.exon Variant of $ that preserves whitespace verbatim.  *The parser for the quasiquote body, using  FlatParse. Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîô Ó '()*+,-./0123 '()*+,-./0123Internal Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîôÉ<exon3Constructor for a quasiquoter for an arbitrary tag.ÏThis can be used to define quoters with custom logic, requiring an instance of   for the given type:!import Exon.Class.Exon (Exon(..))*import Exon.Data.Segment (Segment(String))data Nl‡instance (Monoid a, IsString a) => Exon Nl a where insertWhitespace s1 _ s2 = appendSegment @Nl (appendSegment @Nl s1 (String "\n")) s2exonnl = exonWith [t|Nl|][exonnl|one two three|]"one\ntwo\nthree"=exonÙA quasiquoter that allows interpolation, concatenating the resulting segments monoidally.<[exon|write #{show @Text (5 :: Int)} lines of code|] :: Text"write 5 lines of code":The default implementation for any non-stringly type uses A' to construct the literal segments and D0 to combine them, ignoring whitespace segments.Ínewtype Part = Part Text deriving newtype (Show, Semigroup, Monoid, IsString)[exon|x #{Part "y"}z|] :: Part"xyz":This behavior can be customized by writing an instance of .>exon A variant of =' that always keeps whitespace verbatim. 456789:;<=> 674589:;<=> Safe-Inferred<!"$%&'(),./01245789:;<>?ÀÁÂÃÄÆÇÈËÐÑÓÕÖØÙÚÛâãäçêëîô\ <=>=>< Å   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF  GHIJKILMILNILOÐ#exon-0.3.0.0-6rpacx4wDGQGZ0olpbkkQqExon.CombinatorsExon.Data.RawSegmentExon.Data.ResultExon.Data.SegmentExon.Class.Exon Exon.Parse Exon.QuoteExonexonwsexon Exon.Class intercalate RawSegment WsSegment StringSegment ExpSegment$fEqRawSegment$fShowRawSegmentResultEmpty$fMonoidResult$fSemigroupResult $fEqResult $fShowResult$fFoldableResultSegmentString Whitespace Expression $fEqSegment $fShowSegmentisEmptyconvertSegment appendSegmentinsertWhitespaceconcatSegmentsKeepWhitespace ExonDefault convertKeepWs concatKeepWs$fExonExonDefaultFUN$fExonExonDefaultByteString$fExonExonDefaultByteString0$fExonExonDefaultText$fExonExonDefaultText0$fExonExonDefault[]$fExonKeepWhitespacea$fExonExonDefaultaParserspanws whitespacebefore finishBeforeexpr interpolation untilTokenEndtextsegmentparserparseQOrIOfileExtensions exonError segmentsQreifyExp reifySegments quoteExpWithquoteExpexonWith$fQOrIOQ $fQOrIOIObase Data.StringIsStringGHC.BaseMonoid<>mappend