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

时间:2018-08-07 20:07:56

标签: haskell ghci

我正在使用GHCI 7.10.3,但在简单的局部代码中出现错误。

我想做这样的事情:

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

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

  

:21:1:       约束中的非类型变量参数:Num(a-> a)       (使用FlexibleContexts允许此操作)       当检查“它”具有推断的类型时         它::全部(数字a,数字(a-> a),奥德a)=> a-> a

我的代码在没有最后一行的情况下工作正常。那么如何在haskell中使用错误消息?

1 个答案:

答案 0 :(得分:7)

错误是类型错误,所以这意味着Haskell认为您写的内容毫无意义(从类型系统的角度来看)。

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

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

因此Haskell认为您想从4中减去factorial,但是却看不到factorialNum ber,因此是错误的。严格来讲,只要一个实现了Num typeclass(以及EqShow类型类,一个就可以使它们Num成为函数我们很好。

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

factorial (-4)

然后产生:

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

现在,它会引发您的error "My error"(请参见第一行输出)。