Character kind
We know and love the Symbol kind, but as far as I know it's not possible to analyse a Symbol type, as we would a String term. It would be nice to have a Character kind and some related type families:
```hs
data Character
-- Pattern match a Symbol. 'Nothing when empty, 'Just '(head, tail)
-- otherwise.
type family UnconsSymbol (s :: Symbol) :: Maybe (Character, Symbol)
-- Put a Character at the head of a Symbol.
type family ConsSymbol (c :: Character) (s :: Symbol) :: Symbol
-- Work with Characters. Ideally we'd have counterparts for every
-- function on Data.Char.
type family ToUpper (c :: Character) :: Character
type family IsAlpha (c :: Character) :: Bool
```
<details><summary>Trac metadata</summary>
| Trac field | Value |
| ---------------------- | -------------- |
| Version | 7.10.3 |
| Type | FeatureRequest |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture | |
</details>
<!-- {"blocked_by":[],"summary":"Character kind","status":"New","operating_system":"","component":"Compiler","related":[],"milestone":"","resolution":"Unresolved","owner":{"tag":"OwnedBy","contents":"alexvieth"},"version":"7.10.3","keywords":[],"differentials":[],"test_case":"","architecture":"","cc":[""],"type":"FeatureRequest","description":"We know and love the Symbol kind, but as far as I know it's not possible to analyse a Symbol type, as we would a String term. It would be nice to have a Character kind and some related type families:\r\n\r\n{{{#!hs\r\ndata Character\r\n-- Pattern match a Symbol. 'Nothing when empty, 'Just '(head, tail)\r\n-- otherwise.\r\ntype family UnconsSymbol (s :: Symbol) :: Maybe (Character, Symbol)\r\n-- Put a Character at the head of a Symbol.\r\ntype family ConsSymbol (c :: Character) (s :: Symbol) :: Symbol\r\n-- Work with Characters. Ideally we'd have counterparts for every\r\n-- function on Data.Char.\r\ntype family ToUpper (c :: Character) :: Character\r\ntype family IsAlpha (c :: Character) :: Bool\r\n}}}","type_of_failure":"OtherFailure","blocking":[]} -->
issue