Ошибка определения функции 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)