Использование нескольких операторов let
означает, что вы действительно определяете две функции, а второе определение - затенение первого. Таким образом, countList [1, 2, 3]
генерирует исключение, поскольку определение, которое находится в области видимости, определяется только для []
.
Вам необходимо определить оба уравнения одновременно с одним let
. Вы можете либо ввести их в одну строку, разделяя случаи точкой с запятой
> let countList (x:xs) = 1 + countList xs; countList [] = 0
или использовать многострочный синтаксис GHCI в :{ ... :}
, убедившись, что для выравнивания второй countList
с первым.
> :{
| let countList (x:xs) = 1 + countList xs
| countList [] = 0
| :}
Вы в шоке? К сожалению. – Raptor
это правильно, когда я использую case-of для их соответствия – snow