нравится:

ал экспериментировать с Haskell и у меня возникла проблема. qqq - это функция, которая должна печатать одну строку, если вызывается с помощью «Ничего», и печатать другие вещи, если вызывается с помощью «Просто чего-то».

Первая попытка, похоже, работает:

qqq Nothing = print "There isn't anything to be printed."
qqq (Just x) = print "There is something to be printed." >> print x

main :: IO ()
main = qqq (Just 43)

Но:

когда я пытаюсь сделатьmain = qqq (Nothing) он терпит неудачу («Переменная типа неопределенности« a0 »в ограничении: (Показать a0), возникающая в результате использования« qqq »»)Когда я хочу добавить тип подписи, если не удается:qqq :: Maybe x => x -> IO () ->Type constructor 'Maybe' used as a class -> Но не так ли?qqq :: (Maybe x) -> IO (), Теперь сама подпись выглядит удачной. Ноmain = qqq (Just 43) начинает терпеть неудачу с этим таинственным(Show a0) ошибка как вmain = qqq (Nothing) кейс.

Вопросов:

Зачем звонить qqq сNothing так отличается от звонка сJust 43?Что такое(Show a0)? Упоминается только в сообщениях об ошибках. Любые попытки использовать его приводят к чему-то вроде «Показать не в области».Какова правильная сигнатура типа для этого? Как сделать так, чтобы на Хаскеле была напечатана подпись типа печати? Ожидая что-то вроде:
f 0 = 2
f x = (f (x-1)) + 3

main = print get_type_as_string(f)
-- prints "Number -> Number"

Ответы на вопрос(1)

Ваш ответ на вопрос