Îõ³h$OøL­       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸóThis file is part of the package addy. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at: https://code.devalot.com/open/addy No part of this package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. BSD-2-ClauseNone #$%/25678:<=ÁÂÉÎÑÔÙàáìñ ã addyIs a character in the UTF8-non-ascii class from RFC 6532?addyObsolete control characters. »obs-NO-WS-CTL = %d1-8 / ; US-ASCII control %d11 / ; characters that do not %d12 / ; include the carriage %d14-31 / ; return, line feed, and %d127 ; white space charactersaddy Whitepace.addyRFC 5234: Visible character. ÐVCHAR = %x21-7E ; visible (printing) characters RFC 6532 §3.2 VCHAR =/ UTF8-non-asciiaddyRFC 5322 §3.2.3 Íatext = ALPHA / DIGIT / ; Printable US-ASCII "!" / "#" / ; characters not including "$" / "%" / ; specials. Used for atoms. "&" / "'" / "*" / "+" / "-" / "/" / "=" / "?" / "^" / "_" / "`" / "{" / "|" / "}" / "~" RFC 6532 §3.2 atext =/ UTF8-non-asciiaddy RFC 5322 dtext. édtext = %d33-90 / ; Printable US-ASCII %d94-126 / ; characters not including obs-dtext ; "[", "]", or "\" obs-dtext = obs-NO-WS-CTL / quoted-pair RFC 6532 §3.2 dtext =/ UTF8-non-asciiaddy RFC 5322 ctext. úctext = %d33-39 / ; Printable US-ASCII %d42-91 / ; characters not including %d93-126 / ; "(", ")", or "\" obs-ctext obs-ctext = obs-NO-WS-CTL RFC 6532 §3.2 ctext =/ UTF8-non-asciiaddy Obsolete ctext. obs-ctext = obs-NO-WS-CTLaddy.Characters that can appear in a quoted string.RFC 5322 §3.2.4: ¹qtext = %d33 / ; Printable US-ASCII %d35-91 / ; characters not including %d93-126 / ; "\" or the quote character obs-qtextRFC 6532 §3.2: qtext =/ UTF8-non-ascii addy Obsolete qtext. obs-qtext = obs-NO-WS-CTL addy'Characters that can follow a backslash. 0quoted-pair = ("\" (VCHAR / WSP)) / obs-qp addy9Obsolete characters that can be escaped with a backslash. 7obs-qp = "\" (%d0 / obs-NO-WS-CTL / LF / CR)   óThis file is part of the package addy. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at: https://code.devalot.com/open/addy No part of this package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. BSD-2-ClauseNone #$%/25678:<=ÁÂÉÎÑÔÙàáìñ À' addy"Text that can appear in a comment.addyÈThe location where a comment was parsed or where it should be rendered.addyJust before the -.addyJust after the - but before the address.addy Before the * of the address.addy After the '.addyAfter the complete address.addyÇA comment which may appear in an email address in a specific location.addy*A literal address that can be used with a  or .addyA tag that can be used with a .addyüAddress literals can be used instead of a domain name to direct mail to a specific IP address or other tagged address type..Example email addresses with address literals: Þexample@[127.0.0.1] example@[IPv6:1111:2222:3333:4444:5555:6666:7777] example@[Just-some-text]addy…A literal IP address as defined in RFC 5321 §4.1.3. The address can be in many formats so it is presented here in its parsed form.addyRFC 5321 also defines a general address literal where a standardized tagÜ precedes the address itself. The only information provided about the standardized tag is: ÔStandardized-tag MUST be specified in a Standards-Track RFC and registered with IANA addyRFC 5322 defines a domain-literal¢ as (roughly) a span of characters that are allowed in a domain name. The interpretation of those characters is left to "separate documents" such as RFC 5321.ÜIf an address literal cannot be parsed in one of the proceeding formats it is encoded as a  value.!addy0The name of one host component of a domain name.$addyãA fully-qualified domain name which is made up of a list of host names (labels) separated by dots.'addyA fully-qualified domain name or an address literal.ÒMost email addresses use a domain name. However, it's perfectly legal to use an  instead.*addy*The name of the mailbox on the associated '.-addyíOptional display name. Usually this is the name of the person who receives email at the associated address. "Display Name 0addy/The representation of a complete email address.¸The parser preserves optional components such as the display name and comments. The rendering code can optionally include these optional elements when turning the address back into  .6addyPotential validation errors.7addyÍA component of an email address may not start with the recorded prefix text.8addyËA component of an email address may not end with the recorded suffix text.9addyaddyThe 'Ñ refers to the fully-qualified domain name that accepts mail for the associated *". See the documentation for the ' type for more details.?addyAddresses in both the  name-addr and  addr-spec formats support comments.@addy$Prism for working with domain names.Aaddy'Prism for working with domain literals.BaddyÁIso for converting between domain names and a list of host names.À"gmail.uk.co" ^. _DomainName._HostNames & map (review _HostName)["gmail","uk","co"]Caddy+Prism for working with IP address literals.Daddy/Prism for working with tagged address literals.Eaddy(Prism for working with address literals.FaddyPrism for working with a .Gaddy(Lens for working with comment locations.Haddy'Lens for working with comment contents.=  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH=6789:;012345<=>?-./*+,'()@A$%&!"#B CDEFGH óThis file is part of the package addy. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at: https://code.devalot.com/open/addy No part of this package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. BSD-2-ClauseNone #$%/25678:<=ÁÂÉÎÑÔÙàáìñ%=iaddy Render mode.jaddyÓRender the entire email address, including the optional display name and comments.kaddy?Only render the simplest form of the email address. Only the * and ' are rendered in this mode.laddyRender an email address.maddyRender an email address in  addr-spec format.naddyRender a display name.oaddy$Render comments that have the given Ï. The comment location is also used to decide where to introduce white space.paddy!Render the given address as text.ijklmnopijklpmnoóThis file is part of the package addy. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at: https://code.devalot.com/open/addy No part of this package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. BSD-2-ClauseNone #$%/25678:<=ÁÂÉÎÑÔÙàáìñ0LraddyÑValidate a single host name. Each host name in a domain name (referred to as a label#) must validate with this function.ôRFC 2181 §11 clearly states that there are no restrictions placed on which characters may appear in a label. However, due to legacy issues we enforce the rule from RFC 952 §1 that disallows hyphens as the first or last character of a label.ØRFC 5322 §3.4.1 restricts the characters that may appear in the domain component of an  email address’. Even though a DNS label does not impose such restrictions, in order to be a valid email address the label must only be composed of so-called atext characters or UTF8-non-ascii characters.ÕFinally, RFC 2181 §11 restricts the length of a label to 63 bytes and the fully-qualified domain name to 255 bytes. RFC 6532 which extends the email syntax to allow UTF-8 encoded Unicode characters briefly states in §3.4 to continue using bytes, and not characters. It also states that Unicode text should be normalized (which we do).saddyValidate a domain name.ÔThe domain name is split into host names (labels) and each label is validated with r.taddy/Validate and normalize the text content of the * of an email address.ÓRFC 3696 §3 restricts the length of the local part to a maximum of 64 bytes. RFC 6532 extends the character set to include Unicode characters but maintains the length measurement as bytes and not characters.uaddyValidate the content of a -.There does not appear to be a limit on the length of the display name. For consistency and efficiency we limit it to 64 bytes, the same as the local part.vaddy Validate the  content of a domain literal.ˆThere does not appear to be a limit on the length of an address literal but for consistency with DNS labels we limit them to 63 bytes.waddyValidate the content of an . Uses the same rules as v.xaddy"Validate the content of a comment.•There does not appear to be a limit on the length of a comment. For consistency and efficiency we limit it to 64 bytes, the same as the local part.yaddyValidate an entire 0ç. This is used by the parser to validate rules that are not encoded in the various component parsers.rstuvwxyrstuvwxyóThis file is part of the package addy. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at: https://code.devalot.com/open/addy No part of this package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. BSD-2-ClauseNone #$%/25678:<=ÁÂÉÎÑÔÙàáìñ;izaddy RFC 5322 atom.|addy Parsing mode.}addy%Only support non-obsoleted addresses.~addy'Include support for obsolete addresses.addyAn email address parser.€addy7Run the parser and then validate the resulting address.addyParse email addresses in the  name-addr format.‚addyParse email addresses in the  addr-spec format.ƒaddy Parse the  local-part of an email address.RFC 5322 §3.4.1 6local-part = dot-atom / quoted-string / obs-local-part„addyDomain name parser.…addyParse a display name.†addyAn atom or quoted string. word = atom / quoted-string‡addyParse an unquoted atom. )atom = [CFWS] 1*atext [CFWS]ˆaddy RFC 5322 dot-atom.‰addyStrict  dot-atom-lh from RFC 5322 errata. (dot-atom-lh = [CFWS] dot-atom-text [FWS]ŠaddyStrict  dot-atom-rh from RFC 5322 errata. (dot-atom-rh = [FWS] dot-atom-text [CFWS]‹addyA quoted string.RFC5322 §3.2.4 Ÿqtext = %d33 / ; Printable US-ASCII %d35-91 / ; characters not including %d93-126 / ; "\" or the quote character obs-qtext qcontent = qtext / quoted-pair quoted-string = [CFWS] DQUOTE *([FWS] qcontent) [FWS] DQUOTE [CFWS] obs-qtext = obs-NO-WS-CTL  RFC 6532 §3.2 qtext =/ UTF8-non-asciiRFC 5322 errata item 3135 )https://www.rfc-editor.org/errata/eid3135 úquoted-string = [CFWS] DQUOTE ((1*([FWS] qcontent) [FWS]) / FWS) DQUOTE [CFWS]ÇThis is the rule we use since it's consistent with the text of the RFC.ŒaddyStrict quoted-string-lh from RFC 5322 errata.addy!Comments and folding white space. —ctext = %d33-39 / ; Printable US-ASCII %d42-91 / ; characters not including %d93-126 / ; "(", ")", or "\" obs-ctext obs-ctext = obs-NO-WS-CTL ccontent = ctext / quoted-pair / comment comment = "(" *([FWS] ccontent) [FWS] ")" CFWS = (1*([FWS] comment) [FWS]) / FWSz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ|}~z{€‚ƒ„…†‡ˆ‰Š‹ŒóThis file is part of the package addy. It is subject to the license terms in the LICENSE file found in the top-level directory of this distribution and at: https://code.devalot.com/open/addy No part of this package, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE file. BSD-2-ClauseNone #$%/25678:<=ÁÂÉÎÑÔÙàáìñL “addyDecode an email address.”addyûDecode an email address, allowing obsolete characters. The obsolete characters are parsed but not included in the output.îThis is useful for exacting email addresses from mail messages but should not be used to validate user input.0Addy.decode "my . email . addy@(WTF)example.com"ÜLeft (ParserFailedError "local part > quoted content > '\"': Failed reading: satisfy" :| [])7Addy.decodeLenient "my . email . addy@(WTF)example.com"3Right (EmailAddr "my.email.addy@example.com (WTF)")•addyñEncode an email address as text. This function produces the short form of an email address. That is, just the * and the ' separated by @.–addyßEncode a complete email address to text, including the optional display name and any comments.—addy Build an 0 from a * and $.˜addy Build an 0 from a * and an .™addy%Prism for working with display names. "import Control.Lens ((^?), review)To convert text into a - with content validation:"Some Text" ^? _DisplayNameJust (DisplayName "Some Text")"Some\nText" ^? _DisplayNameNothing -- Validation failed. To access the text content of a -:#review _DisplayName someDisplayName "Some Text"Uses u to perform validation.šaddy:Prism for working with the local part of an email address. "import Control.Lens ((^?), review)To convert text to a * with content validation:"cockroach+mouse" ^? _LocalPart"Just (LocalPart "cockroach+mouse") "cockroach\nmouse" ^? _LocalPartNothing -- Validation failed. To access the text content of a *:review _LocalPart someLocalPart "cockamouse"Uses t to perform validation.›addy$Prism for working with domain names. "import Control.Lens ((^?), review)To convert text to a $ with validation:"gmail.com" ^? _DomainNameJust (DomainName "gmail.com")"too.many.dots." ^? _DomainNameNothing To access the text content of a $:!review _DomainName someDomainName "gmail.com"Uses s to perform validation.œaddy/Prism for working with host names (DNS labels). "import Control.Lens ((^?), review)/To convert text to a host name with validation:"com" ^? _HostNameJust (HostName "com")"com." ^? _HostNameNothing -- Validation failed. To access the text content of a !:review _HostName someHostName"com"Uses r to perform validation.addyPrism for working with the  for an . "import Control.Lens ((^?), review)2To convert text to an address tag with validation:"IPv6" ^? _AddressTagJust (AddressTag "IPv6")"[IPv6]" ^? _AddressTagNothing -- Validation failed.!To access the text content of an :review _AddressTag someTag"tag"Uses w to perform validation.žaddy>Prism for working with the literal text of an address literal. "import Control.Lens ((^?), review)6To convert text to an address literal with validation:"127.0.0.1" ^? _LiteralJust (Literal "127.0.0.1")"[]" ^? _LiteralNothing -- Validation failed. To access the text content of a :review _Literal someLiteral "127.0.0.1"Uses v to perform validation.Ÿaddy5Prism for working with the text content of a comment. "import Control.Lens ((^?), review)-To convert text to a comment with validation:$"best email ever" ^? _CommentContent'Just (CommentContent "best email ever")"\n" ^? _CommentContentNothing*To access the text content of the comment:"review _CommentContent someComment"super"Uses x to perform validation.8  !$'()*-0<=>?@ABCDEFGHrstuvwx“”•–—˜™š›œžŸ8“”•–0—˜<=>?-™u*št'()@A$›s!Bœr CDEwžvFGH Ÿx¡      !"#$%#&'()*+,,-./01234456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}}l~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤#addy-0.1.0.1-3pSO8ge7nrhLfak0jgF8NHAddy.Internal.CharAddy.Internal.TypesAddy.Internal.RenderAddy.Internal.ValidationAddy.Internal.ParserAddy utf8NonAscii obsNoWsCtlwspvcharatextdtextctextctextObsqtextqtextObs quotedPair quotedPairObsCommentContentCCcommentContentText CommentLocBeforeDisplayNameAfterDisplayNameBeforeLocalPart AfterDomain AfterAddressCommentLiteralLit literalText AddressTagATaddressTagTextAddressLiteralIpAddressLiteralTaggedAddressLiteralHostNameHN hostNameText DomainNameDNdomainNameTextDomain DomainLiteral LocalPartLP localPartText DisplayNameDPdisplayNameText EmailAddr _displayName _localPart_domain _commentsErrorInvalidPrefixErrorInvalidSuffixErrorInvalidCharactersErrorInvalidLengthErrorParserFailedError displayName localPartdomaincomments_Domain_DomainLiteral _HostNames_IpAddressLiteral_TaggedAddressLiteral_AddressLiteral_Comment commentLoccommentContent$fShowRenamedShow$fEqDisplayName$fSemigroupDisplayName$fShowDisplayName $fEqLocalPart$fSemigroupLocalPart$fShowLocalPart $fShowDomain $fEqDomain$fEqDomainName$fSemigroupDomainName$fShowDomainName $fEqHostName$fSemigroupHostName$fShowHostName$fShowAddressLiteral$fEqAddressLiteral$fEqAddressTag$fSemigroupAddressTag$fShowAddressTag $fEqLiteral$fSemigroupLiteral $fShowLiteral $fShowComment $fEqComment$fEqCommentContent$fSemigroupCommentContent$fShowCommentContent$fShowCommentLoc$fEqCommentLoc $fShowError $fEqErrorModeFullShortrenderrenderAddrSpecrenderDisplayNamerenderComments renderToText$fShowEmailAddrvalidateHostNamevalidateDomainNamevalidateLocalPartvalidateDisplayNamevalidateLiteralvalidateAddressTagvalidateCommentContentvalidateEmailAddrAtomStrictLenientparse parseWithModenameAddraddrSpec localPartPdomainP displayNamePwordatomdotAtom dotAtomLh dotAtomRhquotedquotedLhcfws $fMonoidAtom$fSemigroupAtom $fShowAtom$fEqMode $fShowModedecode decodeLenientencode encodeFull emailAddr emailAddrLit _DisplayName _LocalPart _DomainName _HostName _AddressTag_Literal_CommentContent text-1.2.3.2Data.Text.InternalText