<div dir="auto">This is cool! </div><div dir="auto"><br></div><div dir="auto">I do think that as ghc works today, these would have to definitely be wired into ghc, and there’s of course the philosophical issue of unicode changing over time.   But this would be a good thing to execute on and add to ghc. </div><div dir="auto"><br></div><div dir="auto">We already have some baby stuff around strings/symbols at the type levle, and work to support more human lanaguage type level computation sounds legit! </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 27, 2020 at 8:03 PM Emily Pillmore <<a href="mailto:emilypi@cohomolo.gy">emilypi@cohomolo.gy</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><div><div style="display:none;border:0px;width:0px;height:0px;overflow:hidden"><img src="https://r.superhuman.com/vZ6ifCKwLbh5J8lcsLQJzaX9N0n3Fmmj0xErtN3jZau2a8qA2VyDsHeHTQxn3IWYMQ60IArsrGmD8OjOEVJQW_XmxcuSZBL_tnfKVRoEZkt_-WCefAF6EUKwBBuuJrv1lHa9XVE03f2AOoLSsfuxK0SqG6umTRJGGYOdw-peMgP8cF0W-PyOl-IHsm4h7g.gif" alt=" " width="1" height="0" style="display:none;border:0px;width:0px;height:0px;overflow:hidden"></div><div><div><div>CC'ing @core-libraries-committee so we don't lose this. It's important work!</div></div><br><div></div></div><br><div><div class="gmail_quote"></div></div></div></div></div><div><div><div><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" id="m_8567285164475294945null"><div dir="ltr"><div class="gmail_quote"><div class="gmail_attr" dir="ltr"><span style="background-color:transparent;color:rgb(0,0,0);font-family:Arial;font-size:11pt;white-space:pre-wrap">Greetings,</span><br></div><div dir="ltr"><div dir="ltr"><span id="m_8567285164475294945m_5097739982601290995gmail-docs-internal-guid-fae61b0e-7fff-3abd-6eb2-1cf52901f45b"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">You may take a look at this merge request with proposed updates: <a href="https://gitlab.haskell.org/ghc/ghc/-/merge_requests/3598" rel="noopener noreferrer" target="_blank">https://gitlab.haskell.org/ghc/ghc/-/merge_requests/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"><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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">type family ToTitle (a :: Char) :: Char</span></p><br><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">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"><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">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"><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">type family NatToChar (a :: Nat) :: Char</span></p><br><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">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"><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">type family GeneralCharCategory (a :: Char) :: GeneralCategory</span></p><br><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">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"><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">type family IsLetter (a :: Char) :: Bool</span></p><br><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">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"><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">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"><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">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"><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">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"><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">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"><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">type IsSeparator a = IsSeparatorCategory (GeneralCharCategory a)</span></p><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">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"><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">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"><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">type family IsMarkCategory (c :: GeneralCategory) :: Bool where</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">  </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"><span style="white-space:pre-wrap">  </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">  IsMarkCategory 'NonSpacingMark       = 'True</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">  </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"><span style="white-space:pre-wrap"> </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">  IsMarkCategory 'SpacingCombiningMark = 'True</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">   </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"><span style="white-space:pre-wrap">  </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">  IsMarkCategory 'EnclosingMark        = 'True</span></p><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">  </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"><span style="white-space:pre-wrap">        </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">  IsMarkCategory _                     = 'False</span></p><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">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"><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"><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">In addition to type families, our patch contain the following updates:</span></p><ol style="margin-top:0px;margin-bottom:0px"><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"><p style="line-height:1.38;margin-top:11pt;margin-bottom:0pt" dir="ltr"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> 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"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> 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"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> 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"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> 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"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> 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"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> 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"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><span style="font-size:11pt;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap"> tests</span></p></li></ol><br><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" dir="ltr"><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">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"><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">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">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"><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">Danya Rogozin.</span></span><br></div></div><br><br></div></div><br><br><br><br><p></p><br><br><br><br>-- <br><br><br>You received this message because you are subscribed to the Google Groups "haskell-core-libraries" group.<br><br><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" rel="noopener noreferrer" target="_blank">haskell-core-libraries+unsubscribe@googlegroups.com</a>.<br><br><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" rel="noopener noreferrer" target="_blank">https://groups.google.com/d/msgid/haskell-core-libraries/CAD_SdCWxBvh%2BU5k87CxZ3SOxqXC%2BmyvE9oh%3DzhMqV2HWe-vzag%40mail.gmail.com</a>.</div></div></blockquote></div></div><br></div></div></div></blockquote></div></div>