Usando Emoji en Haskell
twitter ghc (1)
Recientemente me encontré con un bot en Twitter llamado EmojiHaskell , que dice tuitear ''código interpretable Haskell con nombres de variables emoji''. Me llamó la atención un Tweet particular, ya que parecía una sintaxis mal formada para mí, así que decidí echar un vistazo más de cerca. Hasta ahora he producido el siguiente código:
module Main where
🙏 :: [🍳] -> Maybe 🍳
🙏 [] = Nothing
🙏 (👽:as) = Just 👽
main = print $ 🙏 "♥"
Como he usado λ
en ocasiones en mi código Haskell, esperaba que este código funcionara, pero parece que a GHC no le gusta el emoji en absoluto.
Con $ runhaskell Main.hs
consigo:
Main.hs: 4: 1: error de análisis en la entrada ''🙏''
Ya he echado un vistazo a la extensión UnicodeSyntax e intenté usar solo emoji único o único en lugar de todos para ver si alguno provoca el problema.
Ahora mi pregunta es esta: ¿Existe actualmente un compilador Haskell que acepte el código? ¿Puedo hacer que GHC trabaje con este código de alguna manera?
Ese código no es válido Haskell. La razón es que 🙏 (como, probablemente, todos los Emojis) es un carácter de símbolo:
Prelude> import Data.Char
Prelude Data.Char> generalCategory ''🙏''
OtherSymbol
Pero todavía puede usarlos como cualquier otro símbolo, es decir, como un operador:
Prelude Data.Char> let (🙏) = (+)
Prelude Data.Char> 32 🙏 42
74
Además, como señaló el usuario3237465, si utiliza la sintaxis de prefijo para los operadores, es decir, lo pone entre paréntesis, puede usarlo como cualquier otro símbolo:
(🙏) :: [a] -> Maybe a
(🙏) [] = Nothing
(🙏) ((👽):as) = Just (👽)
main = print $ (🙏) "♥"
Este es casi el ejemplo en la publicación original. Desafortunadamente, este truco no funciona para la variable de tipo. La documentación está redactada un poco por desgracia, pero de hecho los símbolos nunca son variables de tipo y siempre escriben constructores