我正在使用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中使用错误消息?
答案 0 :(得分:7)
错误是类型错误,所以这意味着Haskell认为您写的内容毫无意义(从类型系统的角度来看)。
它将-
解释为“ 二进制减运算符”,例如:
-- v operator
factorial - 4
-- ^ operand ^
因此Haskell认为您想从4
中减去factorial
,但是却看不到factorial
是Num
ber,因此是错误的。严格来讲,只要一个实现了Num
typeclass(以及Eq
和Show
类型类,一个就可以使它们Num
成为函数我们很好。
如果要在此类函数调用中使用负数文字,则需要使用方括号,例如:
factorial (-4)
然后产生:
Prelude> fatorial (-4)
*** Exception: My error
CallStack (from HasCallStack):
error, called at <interactive>:5:19 in interactive:Ghci1
现在,它会引发您的error "My error"
(请参见第一行输出)。