Îõ³h& 1      !"#$%&'()*+,-./0 Safe-Inferred")*ÁÃÄÅÇÜëï asashaExtended regular expressionsasha ConcatenationsashaUnionsasha Kleene starsasha Complementsasha%Empty regex. Doesn't accept anything.match empty s === Falsesasha Everything.match everything s === TruesashaEmpty string. Note: different than .match eps s === null ssasha Character. sashaCharacter range. sashaAny character. sasha Concatenate regular expressions.r <> empty === emptyempty <> r === empty ( r <> s) <> t === r <> (s <> t)r <> eps === reps <> r === r sashaUnion of regular expressions. r \/ r === rr \/ s === s \/ r ( r \/ s) \/ t === r \/ (s \/ t)empty \/ r === rr \/ empty === reverything \/ r === everythingr \/ everything === everythingsasha$Intersection of regular expressions. r /\ r === rr /\ s === s /\ r ( r /\ s) /\ t === r /\ (s /\ t)empty /\ r === emptyr /\ empty === emptyeverything /\ r === rr /\ everything === rsasha Complement. complement (complement r) === rsasha Kleene star.star (star r) === star ( r)star eps === epsstar empty === epsstar anyChar === everythingstar (r \/ eps) === star r&star (char c \/ eps) === star (char c)star (empty \/ eps) === epssasha Kleene plus  r = r <>  r sashaLiteral string.sasha UTF8 stringsasha.UTF8 character, i.e. may match multiple bytes.sashaåWe say that a regular expression r is nullable if the language it defines contains the empty string. nullable epsTruenullable (star "x")Truenullable "foo"Falsenullable (complement eps)Falsesasha*Intuitively, the derivative of a language  \mathcal{L} \subset \Sigma^\star with respect to a symbol  a \in \SigmaÕ is the language that includes only those suffixes of strings with a leading symbol a in  \mathcal{L}.sashaWhether  is (structurally) equal to .sashaWhether  is (structurally) equal to .sashaUses smart constructors.sashaUses  utf8string.    Safe-Inferred"Üëï ©'sasha:Lexer grammar specification: tags and regular expressions.(sashaScan for a single token.(sashascanner definitionsashainputsasha8matched token, consumed bytestring, left over bytestring '('(   Safe-Inferred"Üëï Ž)sasha+Optimized routing to check membership when 1 is statically known. ) c ws = [||member $$c $$(liftTyped ws) ||] )) Safe-Inferred"Üëï Ø2sasha2We give each tag an integer, so we can order them.3sashaLast accept modifier.4sashaInner scanner function.previous matchpositioninput*sasha?Lexer grammar specification: tag codes and regular expressions.+sashaGenerate a scanner code. *+*+  5      !"#$%&'()*+,-./0123456789:; sasha-0.1-53DYd0xQoUa4wXmXPYRJkRSasha.Internal.ERESashaSasha.Internal.Word8Set Sasha.TTHERE EREAppendEREUnionEREStarERENotempty everythingepschar charRangeanyChar anyUtf8Charappendsunions intersections complementstarplusstring utf8Stringutf8Charsatisfydigitnullable derivativematchisEmpty isEverything equivalent$fArbitraryERE $fIsStringERE$fBoundedMeetSemiLatticeERE$fBoundedJoinSemiLatticeERE $fLatticeERE $fMonoidERE$fSemigroupERE$fEqERE$fOrdERE $fShowEREsasha memberCodeSaTTHsatth$fOrdS$fEqS$fShowS$fEqMeas $fOrdMeas#word8set-0.1-F705c8Ez12H6aGKLMaORRt Data.Word8SetWord8SetSMR