Haskell不支持Unicode符号构造函数(例如:◁)吗?

时间:2019-03-26 09:26:01

标签: haskell unicode symbols ghci

例如:

{-# LANGUAGE UnicodeSyntax #-}

data Symbolic n
  = Constant n
  | Variable String
  | Symbolic n :+ Symbolic n
  | Symbolic n :* Symbolic n
  | Symbolic n :◁ Symbolic n
  deriving (Show)

此代码已成功加载到GHCi中。

然后我输入:

Constant 2 :* Variable "a"

没关系。

但是当我输入:

Constant 2 :◁ Variable "a"

***异常::hPutChar:无效参数(无效字符)

这是否意味着Haskell不支持Unicode符号构造函数?

如何使其支持Unicode符号构造函数?

环境: GHCi 8.6.3(WinGHCi) Windows 7

谢谢。

新发现:

当in出现在源文件中时可以使用,但是不能在REPL中输入((我使用WinGHCi)。

2 个答案:

答案 0 :(得分:4)

问题不在于您的代码或构造函数,而仅仅是您的环境未设置为Haskell可以打印unicode字符。试试

Prelude> putStrLn "\9731"

您应该会遇到相同的问题。

我不是Unicode和Windows方面的专家,但是大概可以通过设置LANG=C.utf8环境变量或类似变量来解决此问题。

答案 1 :(得分:0)

在@Cubic之后,可以通过在GHCi之前运行chcp 65001来解决此问题。

我在Windows 7命令行中使用堆栈:

X:\you-path> chcp 65001

X:\you-path> stack ghci

*Main> Constant 2 :◁ Variable "a"

Constant 2 :◁�� Variable "a"

有效。