【问题标题】:Haskell function definition error: Not in scopeHaskell 函数定义错误:不在范围内
【发布时间】:2017-03-16 22:57:04
【问题描述】:

我是 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 -> Maybe a part)...有人可以告诉我这里有什么问题吗?

【问题讨论】:

  • Int 不接受类型参数,因此您需要divide100By :: Int -> Maybe Int。你的函数体还有至少 3 个其他问题...

标签: haskell maybe


【解决方案1】:

整数类型是Int,写成Int a没有任何意义,因为Int不带参数。

另外,Int x 不是一个表达式,所以你不能 case 对此。

此外,当你有一个 Maybe a 类型并且你想检查它的值是什么时,你可以使用 caseNothing/Just x。在这里,您想要构造一个 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)

【讨论】:

  • 谢谢,它确实有效,我以前在某处看到过这个解决方案。但是你能告诉我为什么“案例”不起作用吗?
  • @ZachJ case 确实有效(请参阅编辑),但您只能在输入上使用case,这是一个整数而不是Maybe Int,因此您无法进行模式匹配反对Nothing/Just x
猜你喜欢
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多