сам мало что понимаю...
В этой функции map f формирует [Int], при вызове функции видно, что работает всё прекрасно. Но если изменить сигнатуру с String -> [Int] на String -> String, то ghci ругается на то, что не удалось сопоставить Char с Int.
Почему не [Char] with [Int]?
Потому что компилятор берёт [Char] и [Int] и начинает их сопоставлять сверху вниз: сначала проверяет, что оба - списки, потом идёт "вглубь" и там сравнивает Char с Int.
а также потому что компилятор предполагает, что корень проблемы именно в f. потому что map полиморфная и согласна с любым списком. а если сравнивать что-то менее гибкое, то будет • Couldn't match type ‘Int’ with ‘Char’ Expected: String Actual: [Int]
Обсуждают сегодня