我是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中没有得到函数定义(divide100By :: Int a - >也许是一部分)...有人可以告诉我这里有什么问题吗?
答案 0 :(得分:4)
整数类型为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)