如何在 Haskell 函数中使用错误?

How to use error in a Haskell function?

我正在使用 GHCI 7.10.3,但我在一个简单的阶梯代码中遇到了错误。

我想做这样的事情:

fatorial n
    | n == 0  = 1
    | n > 0 = n * fatorial(n-1)
    | otherwise = error "My error"

但是当调用fatorial -4时,输出是:

:21:1: Non type-variable argument in the constraint: Num (a -> a) (Use FlexibleContexts to permit this) When checking that ‘it’ has the inferred type it :: forall a. (Num a, Num (a -> a), Ord a) => a -> a

我的代码没有最后一行也能正常工作。那么如何在 haskell?

中使用错误消息

这个错误是一个类型错误,所以这意味着 Haskell 认为你写的东西没有意义(从类型系统的角度来看)。

它将 - 解释为“二进制减号运算符”,例如:

--         v operator
factorial  -  4
-- ^  operand ^ 

所以 Haskell 认为你想从 factorial 中减去 4,但它没有看到 factorial 如何是 Number,因此错误。严格来说,一个 可以 创建函数 Numbers,只要实现 Num typeclass (as well as the Eq and Show 类型类)我们就可以了。

如果要在此类函数调用中使用负数文字,则需要使用括号,例如:

factorial <b>(-4)</b>

然后生成:

Prelude> fatorial (-4)
*** Exception: My error
CallStack (from HasCallStack):
  error, called at <interactive>:5:19 in interactive:Ghci1

所以现在它提高了你的 error "My error"(见第一行输出)。