Почему «все» дает мне это «Не удалось найти ожидаемый тип»? - PullRequest
1 голос
/ 03 февраля 2011
m = [[1,0,0],[2,-3,0],[4,5]]
t all@(x:xs) = let (m, n) = (length all, length x) in all (==n) (map length all)

Команда:

t m

дает:

Couldn't match expected type `(Int -> Bool) -> [Int] -> t'
       against inferred type `[[a]]'
In the expression: all (== n) (map length all)
In the expression:
    let (m, n) = (length all, length x) in all (== n) (map length all)
In the definition of `t':
    t (all@(x : xs))
           = let (m, n) = ... in all (== n) (map length all)

Ответы [ 2 ]

4 голосов
/ 03 февраля 2011

Причина в том, что вы переопределяете символ all на параметр t. Таким образом, локальный all затеняет глобальный all, и вы получаете эту ошибку. В качестве решения, попробуйте дать вашему местному all другое имя.

4 голосов
/ 03 февраля 2011

Вы связываете имя all со всем списком, поэтому функция прелюдии all больше не отображается. Выберите другое имя или бросьте all@ и просто используйте let (m, n) = (length xs + 1, ...) или что-то подобное.

По теме: почему вы вообще рассчитываете length all? Вы его нигде не используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...