tipos tabla sirve que para ejemplos codigo codificaciones codificacion caracteres string haskell unicode ghc

string - tabla - Rango de caracteres Unicode GHC acepta



unicode utf-8 (1)

Guardando main = putStrLn "🥓 🥐 🥒 🥔" como UTF-8 y ejecutándolo con ghc 8.0.1 en macOS, obtuve:

lexical error in string/character literal at character ''/129365''

Encontré este informe de error de ghc relacionado (pero cerrado):

La causa (para ambos problemas) fue que las versiones anteriores de GHC admiten una versión anterior de Unicode:

$ ghc-7.0.3 -e "Data.Char.generalCategory ''/8342''" NotAssigned

Así que parece que el problema es que la versión de ghc que estamos usando todavía no es compatible con los emojis más nuevos: cree que el punto de código Unicode no está asignado y los errores se han eliminado aunque se haya asignado al emoji en las versiones más recientes de Unicode.

Un ticket de error abierto relacionado con ghc que en su mayoría trata sobre los caracteres en blanco que están permitidos.

Finalmente, lit_error función lit_error en Lexer.x es donde Lexer.x el error. Sin embargo, hay múltiples funciones en ese archivo que llaman a ese error, por lo que no estoy seguro de dónde viene exactamente ...

Esto puede parecer un poco ridículo, pero GHC no puede compilar mi cadena que contiene tocino, un croissant, pepino y una papa:

main = putStrLn "🥓 🥐 🥒 🥔"

Me doy cuenta de que podría escribir fácilmente

main = putStrLn "/x1F953 /x1F950 /x1F952 /x1F954"

con el mismo efecto, pero siempre había asumido que GHC aceptaría cualquier unicode en su fuente. Entonces, ¿ cuáles son las restricciones reales sobre caracteres unicode que GHC acepta en los archivos fuente ?

Por cierto: me doy cuenta de que apoyar este tipo de cosas es un infierno para el GHC Léxer (de hecho, me encontré con el problema anterior mientras escribía casos de prueba para un lexer que escribí), pero aún estoy un poco decepcionado.