分裂错误,Haskell

时间:2015-01-13 16:41:12

标签: haskell

我的代码,其中n = 4:

f n = map (4/) [1..n]

main = do
    n <- getLine
    print(f (product(map read $ words n :: [Int])))

如果我在终端map (4/) [1..n]中使用,我会得到一个正确答案:[4.0,2.0,1.3333333333333333,1.0]。 但是在我的程序中,它无法正常工作,错误信息是:No instance for (Fractional Int) arising from a use of f&#39;` 我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

您的nInt,不是Fractional类型。这些是使用/运算符支持除法的那些。您可以将/替换为div以获得整数除法(截断为整数),也可以添加fromIntegral以将n转换为正确的类型。

您的代码应该类似于

 f n = map (4/) [1..fromIntegral n]

为了澄清一点:你的函数f最终会对给定的参数进行除法。这导致类型推断引擎确定那些参数应该是Fractional类型。然后,您在main中使用该功能,明确地给它Int

这就是为什么错误上写着“你给了我一个IntFractional Int没有实例(读作”Int不是Fractional类型')我需要它,因为你将Int传递给需要该实例的东西。“