Я начал экспериментировать с 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 (Ничего)
он терпит неудачу («Переменная неоднозначного типа« a0 »в ограничении: (Показать a0) возникает из-за использования« qqq »») qqq :: Maybe x => x -> IO ()
-> Конструктор типа «Может быть», используемый как класс
-> Но не так ли? qqq :: (Может быть, x) -> IO ()
. Теперь сама подпись выглядит удачной. Но main = qqq (Just 43)
начинает давать сбой с той загадочной (Show a0)
ошибкой, как в случае main = qqq (Nothing)
. Вопросы :
Ничто
так не отличается от вызова с помощью Just 43
? (Покажите a0)
? Это упоминается только в сообщениях об ошибках. Любые попытки использовать это приводят к чему-то вроде «Показать не в области видимости». f 0 = 2
f x = (f (x-1)) + 3
main = print get_type_as_string(f)
-- prints "Number -> Number"