Haskell 如果我知道结果是一个整数,但ghc不太确定怎么办?
假设我有一段代码:Haskell 如果我知道结果是一个整数,但ghc不太确定怎么办?,haskell,Haskell,假设我有一段代码: demo::Integer -> Integer demo x = x*(x+1)/2 main = do print $ demo 8 很明显,结果是一个整数,因为x或其后继者是偶数。 可以理解的是,编译器只查看/并说 [1 of 1] Compiling Main ( debug.hs, debug.o ) debug.hs:2:17: No instance for (Fractional Integer) arising f
demo::Integer -> Integer
demo x = x*(x+1)/2
main = do print $ demo 8
很明显,结果是一个整数,因为x或其后继者是偶数。可以理解的是,编译器只查看
/
并说
[1 of 1] Compiling Main ( debug.hs, debug.o )
debug.hs:2:17:
No instance for (Fractional Integer) arising from a use of `/'
Possible fix: add an instance declaration for (Fractional Integer)
In the expression: x * (x + 1) / 2
In an equation for `demo': demo x = x * (x + 1) / 2
但据我所知,整数
不是分数
的一部分。
如何保留签名
Integer->Integer
?您不能将/
函数与Integer
一起使用。如果您想使用经典整数除法,请改用div
。您不能将/
函数与整数一起使用。如果您想使用经典整数除法,请使用div
。您不能对整数使用/
。试试demo x=x*(x+1)`div`2
谢谢,这就是我所需要的!如果你回答这个问题,我会接受的。还要记住,数学数字和它们在编程语言中的实现是有区别的。仅仅因为你能从数学上证明某个表达式总是一个整数,并不意味着当你试图用编程语言计算它时,你实际上得到了一个整数。这取决于实现。不能对整数使用/
。试试demo x=x*(x+1)`div`2
谢谢,这就是我所需要的!如果你回答这个问题,我会接受的。还要记住,数学数字和它们在编程语言中的实现是有区别的。仅仅因为你能从数学上证明某个表达式总是一个整数,并不意味着当你试图用编程语言计算它时,你实际上得到了一个整数。这取决于实施情况。