Я использую стек Haskell для создания программы. Моя программа строится нормально, но я хотел бы написать тестовый файл, чтобы запустить stack test
в моей существующей программе. Моя проблема в том, что моя функция для тестирования возвращает тип Maybe, который не может быть выведен с использованием синтаксиса putStrLn f
. Я пытаюсь написать в своем тестовом файле функцию, которая принимает значение «Может быть» и возвращает «Ничего», если ей было задано «Ничего», или строку, содержащую , если ей было задано «Просто а.
Вот мой код:
printMaybe :: Show a => Maybe a -> String
printMaybe Nothing = "Nothing"
printMaybe (Just a) = show a
и main содержит строку
putStrLn $ printMaybe (Nothing)
Мое сообщение об ошибке:
test\Spec.hs:12:16: ошибка: * Переменная неоднозначного типа
a0' arising from a use of
printMaybe' предотвращает ограничение(Show a0)' from being solved. Probable fix: use a type annotation to specify what
a0', которое должно быть. Эти потенциальные экземпляры существуют: Порядок показа экземпляров -- определено вGHC.Show' instance Show Integer -- Defined in
GHC.Show' instance Show a => Show (Maybe a) -- определено вGHC.Show' ...plus 22 others ...plus 27 instances involving out-of-scope types (use -fprint-potential-instances to see them all) * In the second argument of
($)', а именно `printMaybe (Nothing)' В строке блока «сделать»: putStrLn $ printMaybe (ничего) В выражении: do putStrLn ("====== Запуск тестов ======") putStrLn $ printMaybe (ничего) | 12 | putStrLn $ printMaybe (ничего) | ^^^^^^^^^^^^^^^^^^^^
Будем очень признательны за любую помощь :)
Как говорит ошибка, проблема не с вашим
printMaybe
, а сprintMaybe Nothing
в вашем блокеdo
, так как тогда непонятно, что такое типa
.