最近,我在推特上遇到了一个名为EmojiHaskell的机器人,它声称在推特上发布“可解释的带有表情符号变量名的Haskell代码”。一个特定的推特引起了我的注意,因为在我看来它是格式错误的语法,所以我决定仔细看一看。到目前为止,我已经生成了以下代码:
module Main where
:: [] -> Maybe
[] = Nothing
(:as) = Just
main = print $ "♥"由于我有时在Haskell代码中使用了λ,所以我希望这段代码能够工作,但看起来GHC根本不喜欢这个表情符号。
关于$ runhaskell Main.hs,我得到:
Main.hs:4:1:解析输入‘’上的错误
我已经看过UnicodeSyntax扩展,并且尝试只使用一些或单一的表情符号,而不是所有的表情符号,以确定某个表情符号是否引发了问题。
现在我的问题是:当前是否有接受代码的Haskell编译器?我能让GHC以某种方式使用这个代码吗?
发布于 2015-08-12 13:11:15
该代码无效,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 $ () "♥"这几乎就是最初文章中的例子。不幸的是,这个技巧不适用于类型变量。不幸的是,文献资料的措辞有点遗憾,但是事实上符号从来不是类型变量,而且总是类型构造函数。
https://stackoverflow.com/questions/31965349
复制相似问题