Ошибка определения функции Haskell: вне области действия

Я новичок в Haskell, и я застрял на примере. Я хотел бы поэкспериментировать с типом Maybe, но мой код не компилируется:

divide100By :: Int a -> Maybe a
divide100By x = case (Int x) of 
    Nothing -> Nothing
    Just x -> 100 / x

main = putStrLn ("Result: " ++ show (divide100By 5))

Но я всегда получаю ошибку:

Not in scope: data constructor 'Int'

Боюсь, я не совсем понял определение функции в Haskell (div100By:: Int a -> Может быть, часть)... Может кто-нибудь сказать мне, что здесь не так?

1 ответ

Целочисленный тип Int, пишу Int a ничего не значит, так как Int не принимает аргументов.

Также, Int x это не выражение, так что вы не можете case на что.

Далее вы используете case с Nothing/Just x когда у вас есть Maybe a введите и вы хотите проверить, каково его значение. Здесь вместо этого вы хотите построить Maybe a тип.

Попробуйте это вместо этого:

divide100By :: Int -> Maybe Int
divide100By 0 = Nothing
divide100By x = Just (100 `div` x)

или же

divide100By :: Int -> Maybe Int
divide100By y = case y of
   0 -> Nothing
   x -> Just (100 `div` x)
Другие вопросы по тегам