Haskell разочарован вызовами функций - PullRequest
2 голосов
/ 19 сентября 2011

Обучение Хаскеллу убивает меня. Если я собираюсь написать функцию, которая принимает массив массивов упорядоченных элементов и выводит то же самое, как мне это сделать?

Я пытаюсь:

main = testfn [[1],[2]]

testfn :: (Ord a) => [[a]] -> [[a]]
testfn x = x

Но я получаю сообщение:

Не удалось сопоставить ожидаемый тип 'IO t0' с фактическим типом '[[a0]]' В expression: main При проверке типа функции 'main'

Ответы [ 2 ]

7 голосов
/ 19 сентября 2011

Ваша проблема здесь в том, что main должен иметь тип вида IO a (вы можете увидеть это в ошибке - GHC ожидает, что выведенный тип main [[a0]] совпадет с IO t0).Здесь main имеет тип [[Int]].Вы можете легко исправить это, просто напечатав результат:

main = print (testfn [[1],[2]])
3 голосов
/ 19 сентября 2011

Функция main должна иметь тип IO a. Вы определяете main как testfn [..] типа Ord a, Num a => [[a]].

Что вы хотите, чтобы программа делала? Сравните с известным решением для вашего заказа?

main = print (knownSolution == testfn [[1],[2]])

Или, возможно, распечатать результат?

main = print $ testfn [[1],[2]]
...