Haskell 整数不作为整数

Haskell Integer not acting as Integer

所以我定义了一个 variable/function 接受两个输入并显示一系列 1 和 0

bin 0 0 = '0'
bin 0 1 = '1'
bin 0 2 = '1'
bin 0 3 = '0'
bin 0 4 = '1'

现在我想创建一个 bin 变量的副本,除了在 0 3 处应该有一个 1 所以我试图在一个新函数中实现这个

changeBin w z = binNew where 
                binNew w z = '1'
                binNew x y = bin x y

然而,如果我这样做,它会给我一个模式匹配冗余警告,当我调用 changeBin 0 3 时,它会进入循环,但是当我将函数更改为

changeBin w z = binNew where 
                binNew 0 3 = '1'
                binNew x y = bin x y

这是可行的,但我想用第一种方式来做,这样我就可以随时更改它而无需编写整个函数,但我不知道为什么当我只用它有效的数字编写相同的代码时它会给我一个冗余错误

我是新手 haskell 多多包涵谢谢

如果我对第一个函数的错误有任何帮助,我们将不胜感激

1 changeBin w z = binNew where 
2                 binNew w z = '1'
3                 binNew x y = bin x y

第1行的w和第2行的w是不同的变量。第 2 行的 w 不会成为仅当它与第一行给出的 w 具有相同值时才匹配的模式——相反,它定义了一个覆盖旧变量的新变量。您需要明确比较:

changeBin w z = binNew
    where
    binNew w' z' 
        | w' == w && z' == z = '1'
        | otherwise = bin x y