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
谢谢,这就是我所需要的!如果你回答这个问题,我会接受的。还要记住,数学数字和它们在编程语言中的实现是有区别的。仅仅因为你能从数学上证明某个表达式总是一个整数,并不意味着当你试图用编程语言计算它时,你实际上得到了一个整数。这取决于实施情况。