Haskell整数不充当整数

Has*_*ase 1 haskell variable-assignment

所以我要定义一个变量/函数,它接受两个输入并显示一系列的1和0

bin 0 0 = '0'
bin 0 1 = '1'
bin 0 2 = '1'
bin 0 3 = '0'
bin 0 4 = '1'
Run Code Online (Sandbox Code Playgroud)

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

changeBin w z = binNew where 
                binNew w z = '1'
                binNew x y = bin x y
Run Code Online (Sandbox Code Playgroud)

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

changeBin w z = binNew where 
                binNew 0 3 = '1'
                binNew x y = bin x y
Run Code Online (Sandbox Code Playgroud)

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

我是Haskell的新手,谢谢

感谢我对第一个功能的错误的任何帮助

luq*_*qui 7

1 changeBin w z = binNew where 
2                 binNew w z = '1'
3                 binNew x y = bin x y
Run Code Online (Sandbox Code Playgroud)

w第1行和w第2行是不同的变量。 w第2行上的模式不会变成仅与w第1行上的值相同时才匹配的模式–而是定义了一个新变量来覆盖旧变量。您需要明确比较:

changeBin w z = binNew
    where
    binNew w' z' 
        | w' == w && z' == z = '1'
        | otherwise = bin x y
Run Code Online (Sandbox Code Playgroud)