Haskell函数定义错误:不在范围内

时间:2017-03-16 22:57:04

标签: haskell maybe

我是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 - >也许是一部分)...有人可以告诉我这里有什么问题吗?

1 个答案:

答案 0 :(得分:4)

整数类型为Int,写Int a意味着什么,因为Int不接受参数。

此外,Int x不是表达式,因此您无法case

此外,当您拥有case类型并且想要检查其值是什么时,可以将Nothing/Just xMaybe 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)