К сожалению, есть много ошибок: я укажу только первые.
length' :: [a] -> [a] -> Int
Это означает, что length'
принимает два аргумента типа [a]
и возвращает Int
. Это странно: почему функция длины берет два списков? Давайте предположим, что два аргумента - это действительно то, что вам нужно, и двигайтесь дальше.
length' [] = 0
Здесь вы определяете length'
с одним аргументом []
. Почему не два?
length' (x:xs) (y:ys) = \n -> ...
Здесь вы определяете длину, имея два аргумента, x:xs
и y:xs
. Однако вы возвращаете функцию \n -> ...
, которая не соответствует типу возврата Int
.
Более того:
length (x:xs) > (y:ys)
выше, вы сравниваете Int
и список. Скажем, 5 < [1,2,3]
верно? Нет, это бессмысленное сравнение.