在 Haskell 中使用表情符号
Using Emoji in Haskell
我最近在 Twitter 上遇到一个名为 EmojiHaskell, that claims to tweet 'interpretable Haskell code with emoji variable names'. A particular Tweet 的机器人引起了我的注意,因为它看起来像是格式错误的语法,所以我决定仔细研究一下。到目前为止,我已经生成了以下代码:
module Main where
:: [] -> Maybe
[] = Nothing
(:as) = Just
main = print $ "♥"
因为我在我的 Haskell 代码中偶尔使用了 λ
,所以我希望这段代码可以工作,但似乎 GHC 根本不喜欢表情符号。
使用 $ runhaskell Main.hs
我得到:
Main.hs:4:1: parse error on input ‘’
我已经看过 UnicodeSyntax 扩展,
并尝试只使用部分或单个表情符号而不是所有表情符号来查看是否是某个表情符号引发了问题。
现在我的问题是:
目前是否有 Haskell 编译器可以接受该代码?
我可以让 GHC 以某种方式使用此代码吗?
该代码无效 haskell。原因是(可能像所有表情符号一样)是一个符号字符:
Prelude> import Data.Char
Prelude Data.Char> generalCategory ''
OtherSymbol
但您仍然可以像使用任何其他符号一样使用它们,即作为运算符:
Prelude Data.Char> let () = (+)
Prelude Data.Char> 32 42
74
此外,正如 user3237465 指出的那样,如果您对运算符使用前缀语法,即将其放在括号中,您甚至可以像使用任何其他符号一样使用它:
() :: [a] -> Maybe a
() [] = Nothing
() (():as) = Just ()
main = print $ () "♥"
这几乎就是原文中的例子post。不幸的是,这个技巧对类型变量不起作用。 the documentation is worded a bit unfortunately, but in fact 符号永远不是类型变量,总是类型构造函数
我最近在 Twitter 上遇到一个名为 EmojiHaskell, that claims to tweet 'interpretable Haskell code with emoji variable names'. A particular Tweet 的机器人引起了我的注意,因为它看起来像是格式错误的语法,所以我决定仔细研究一下。到目前为止,我已经生成了以下代码:
module Main where
:: [] -> Maybe
[] = Nothing
(:as) = Just
main = print $ "♥"
因为我在我的 Haskell 代码中偶尔使用了 λ
,所以我希望这段代码可以工作,但似乎 GHC 根本不喜欢表情符号。
使用 $ runhaskell Main.hs
我得到:
Main.hs:4:1: parse error on input ‘’
我已经看过 UnicodeSyntax 扩展, 并尝试只使用部分或单个表情符号而不是所有表情符号来查看是否是某个表情符号引发了问题。
现在我的问题是: 目前是否有 Haskell 编译器可以接受该代码? 我可以让 GHC 以某种方式使用此代码吗?
该代码无效 haskell。原因是(可能像所有表情符号一样)是一个符号字符:
Prelude> import Data.Char
Prelude Data.Char> generalCategory ''
OtherSymbol
但您仍然可以像使用任何其他符号一样使用它们,即作为运算符:
Prelude Data.Char> let () = (+)
Prelude Data.Char> 32 42
74
此外,正如 user3237465 指出的那样,如果您对运算符使用前缀语法,即将其放在括号中,您甚至可以像使用任何其他符号一样使用它:
() :: [a] -> Maybe a
() [] = Nothing
() (():as) = Just ()
main = print $ () "♥"
这几乎就是原文中的例子post。不幸的是,这个技巧对类型变量不起作用。 the documentation is worded a bit unfortunately, but in fact 符号永远不是类型变量,总是类型构造函数