<html><head></head><body><div><div><div style="display: none; border: 0px; width: 0px; height: 0px; overflow: hidden; visibility: hidden;"><img src="https://r.superhuman.com/bHRch7ZTotIjtkCRXW5zF2yBGJ3SwXaseQJza5BCgEhbdEIJno4t64D57m6BLhibgpcOls7KHSE4A79TYltqvPcY0fVDhUm3nO5QE2mP6Djt0Uz-D_cjBfyqSrzTIjOwpumx96bCcPP5eOnR1qr7xARHentBlpzX_qExG1tj-jkkmrJCbU7uxyA.gif" alt=" " width="1" height="0" style="display: none; border: 0px; width: 0px; height: 0px; overflow: hidden; visibility: hidden;"/><!--                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                --></div><div><div><div>CC'ing @core-libraries-committee so we don't lose this. It's important work!</div></div><br/><div class="gmail_signature"></div></div><br/><div><div class="gmail_quote">On Fri, Jul 10, 2020 at 12:02 PM, Daniel Rogozin <span dir="ltr"><<a href="mailto:daniel.rogozin@serokell.io" target="_blank">daniel.rogozin@serokell.io</a>></span> wrote:<br/><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote sh-color-black sh-color" style="null" id="null"><div dir="ltr" class="sh-color-black sh-color"><div class="gmail_quote sh-color-black sh-color"><div class="gmail_attr sh-color-black sh-color" dir="ltr"><span style="background-color:transparent;color:rgb(0,0,0);font-family:Arial;font-size:11pt;white-space:pre-wrap" class="sh-color-black sh-color">Greetings,</span><br/></div><div dir="ltr" class="sh-color-black sh-color"><div dir="ltr" class="sh-color-black sh-color"><span id="m_5097739982601290995gmail-docs-internal-guid-fae61b0e-7fff-3abd-6eb2-1cf52901f45b" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">I would like to propose and discuss several changes related to the character kind. Some of those changes were implemented jointly with Rinat Stryungis, my Serokell teammate. </span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">The purpose of this patch is to provide a possibility of analysing type-level strings (symbols) as term-level ones. This feature allows users to implement such programs as type-level parsers. One needs to have full-fledged support of type-level characters as well as we already have for strings and numbers. In addition to this functionality, it makes sense to introduce the set of type-families, counterparts of functions defined in the Data.Char module in order to work with type-level strings and chars as usual (more or less).</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">For more convenience, it’s worth having some of the character-related type families as built-ins and generating the rest of ones as type synonyms.</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">The patch fixes #11342, an issue opened by Alexander Vieth several years ago. In this patch, we introduced the Char Kind, a kind of type-level characters, with the additional type-families, type-level counterparts of functions from the `Data.Char` module. </span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">In contrast to Vieth’s approach, we use the same Char type and don’t introduce the different `Character` kind. We provide slightly more helpers to work with the Char kind, see below.</span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">You may take a look at this merge request with proposed updates: <a href="https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3598" target="_blank" rel="noopener noreferrer">https:/<wbr/>/<wbr/>gitlab.<wbr/>haskell.<wbr/>org/<wbr/>ghc/<wbr/>ghc/<wbr/>-/<wbr/>merge_requests/<wbr/>3598</a>.</span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">First of all, we overview the additional type families implemented by us in this patch.</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family CmpChar (a :: Char) (b :: Char) :: Ordering</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">Comparison of type-level characters, as a type family. A type-level analogue of the function `compare` specified for characters.</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family LeqChar (a :: Char) (b :: Char) :: Bool</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">This is a type-level comparison of characters as well. `LeqChar` yields a Boolean value and corresponds to `(<=)`.</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family ConsSymbol (a :: Char) (b :: Symbol) :: Symbol</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">This extends a type-level symbol with a type-level character</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family UnconsSymbol (a :: Symbol) :: Maybe (Char, Symbol)</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">This type family yields type-level `Just` storing the first character of a symbol and its tail if it is nonempty and `Nothing` otherwise.</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">Type-level counterparts of the functions `toUpper`, `toLower`, and `toTitle` from 'Data.Char'.</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family ToUpper (a :: Char) :: Char</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family ToLower (a :: Char) :: Char</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family ToTitle (a :: Char) :: Char</span></p><br/><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">These type families are type-level analogues of the functions `ord` and `chr` from Data.Char respectively.</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family CharToNat (a :: Char) :: Nat</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family NatToChar (a :: Nat) :: Char</span></p><br/><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">A type-level analogue of the function `generalCategory` from `Data.Kind`.</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family GeneralCharCategory (a :: Char) :: GeneralCategory</span></p><br/><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">The second group of type families consists of built-in unary predicates. All of them are based on their corresponding term-level analogues from `Data.Char`. The precise list is the following one:</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsAlpha (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsAlphaNum (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsControl (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsPrint (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsUpper (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsLower (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsSpace (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsDigit (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsOctDigit (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsHexDigit (a :: Char) :: Bool</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsLetter (a :: Char) :: Bool</span></p><br/><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">We also provide several type-level predicates implemented via the `GeneralCharCategory` type family.</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type IsMark a = IsMarkCategory (GeneralCharCategory a)</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type IsNumber a = IsNumberCategory (GeneralCharCategory a)</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type IsPunctuation a = IsPunctuationCategory (GeneralCharCategory a)</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type IsSymbol a = IsSymbolCategory (GeneralCharCategory a)</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type IsSeparator a = IsSeparatorCategory (GeneralCharCategory a)</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">Here is an example of an implementation:</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type IsMark a = IsMarkCategory (GeneralCharCategory a)</span></p><br/><p style="line-height:1.38;text-indent:36pt;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">type family IsMarkCategory (c :: GeneralCategory) :: Bool where</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">  </span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><span style="white-space:pre-wrap" class="sh-color-black sh-color">       </span></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">  IsMarkCategory 'NonSpacingMark       = 'True</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">  </span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><span style="white-space:pre-wrap" class="sh-color-black sh-color">       </span></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">  IsMarkCategory 'SpacingCombiningMark = 'True</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">   </span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><span style="white-space:pre-wrap" class="sh-color-black sh-color">        </span></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">  IsMarkCategory 'EnclosingMark        = 'True</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">  </span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><span style="white-space:pre-wrap" class="sh-color-black sh-color">      </span></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">  IsMarkCategory _                     = 'False</span></p><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">Built-in type families I described above are supported with the corresponding definitions and functions in `compiler/GHC/Builtin/Names.hs`, `compiler/GHC/Builtin/Types.hs`, and `compiler/GHC/Builtin/Types/Literals.hs`.</span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">In addition to type families, our patch contain the following updates:</span></p><ol style="margin-top:0px;margin-bottom:0px" class="sh-color-black sh-color"><li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(31,35,38);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" dir="ltr" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:11pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"> parsing the 'x' syntax</span></p></li><li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(31,35,38);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" dir="ltr" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"> type-checking 'x' :: Char</span></p></li><li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(31,35,38);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" dir="ltr" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"> type-checking Refl :: 'x' :~: 'x'</span></p></li><li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(31,35,38);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" dir="ltr" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"> Typeable / TypeRep support</span></p></li><li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(31,35,38);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" dir="ltr" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"> template-haskell support</span></p></li><li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(31,35,38);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" dir="ltr" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"> Haddock related updates</span></p></li><li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(31,35,38);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" dir="ltr" class="sh-color-black sh-color"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"> tests</span></p></li></ol><br/><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr" class="sh-color-black sh-color"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">At the moment, the merge request has some minor imperfections for polishing and improvement, but we have a prototype of a possible implementation.</span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">The aim of my email is to receive your feedback on this patch.</span></p><br/><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">Kind regards,</span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color"><br/></span><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap" class="sh-color-black sh-color">Danya Rogozin.</span></span><br/></div></div>
</div></div>

<p class="sh-color-black sh-color"></p>

-- <br/>
You received this message because you are subscribed to the Google Groups "haskell-core-libraries" group.<br/>
To unsubscribe from this group and stop receiving emails from it, send an email to <a href="mailto:haskell-core-libraries+unsubscribe@googlegroups.com" target="_blank" rel="noopener noreferrer">haskell-core-libraries+unsubscribe@<wbr/>googlegroups.<wbr/>com</a>.<br/>
To view this discussion on the web visit <a href="https://groups.google.com/d/msgid/haskell-core-libraries/CAD_SdCWxBvh%2BU5k87CxZ3SOxqXC%2BmyvE9oh%3DzhMqV2HWe-vzag%40mail.gmail.com?utm_medium=email&utm_source=footer" target="_blank" rel="noopener noreferrer">https:/<wbr/>/<wbr/>groups.<wbr/>google.<wbr/>com/<wbr/>d/<wbr/>msgid/<wbr/>haskell-core-libraries/<wbr/>CAD_SdCWxBvh%2BU5k87CxZ3SOxqXC%2BmyvE9oh%3DzhMqV2HWe-vzag%40mail.<wbr/>gmail.<wbr/>com</a>.</div></div></blockquote></div></div><br/></div></div></body></html>