Haskell错误:在定义代数数据类型时,键入变量不在范围内

时间:2018-01-12 10:40:19

标签: haskell

为什么错误

proba.hs:5:28: Not in scope: type variable `<stderr>: commitBuffer: invalid argument (invalid character)
尝试使用以下代码编译文件proba.hs时出现

main :: IO()
main = do
    print (isBalanced (Node 17 (Node 14  Empty Empty) (Node 20 (Node 20 Empty Empty) (Node 20 Empty Empty))) 2)

data Tree a = Empty | Node а (Tree a) (Tree a) 
             deriving (Read, Show)

depth :: Tree a -> Int
depth  Empty         = 0
depth (Node _ t1 t2) = 1 + max (depth t1) (depth t2)

isBalanced :: Tree a -> Int -> Bool
isBalanced Empty _          = True
isBalanced (Node n t1 t2) k = abs (depth t1 - depth t2) <= k && isBalanced t1 k && isBalanced t2 k

1 个答案:

答案 0 :(得分:6)

а声明中的前两个data 不是Latin(U + 0061),他们是&#39 ; re Cyrillic(U + 0430)。

使用西里尔字符没有任何问题,GHC支持它们 - 但在这一行中,拉丁语a与先前类型变量Cyrillic а的名称不匹配

更换:

data Tree a = Empty | Node а (Tree a) (Tree a)

使用:

data Tree a = Empty | Node a (Tree a) (Tree a)

应该解决此问题(请确保您自己输入所有a)。也许检查某人是不是想对你恶作剧......