为什么会出现这种失败L is [1,2,3,4],而且这工作:L = [1,2,3]?
但是L is 1,L = 1两者都是一样的.
我仍然不理解Haskell中的划分.我的第一个目的是定义一个这样的函数:
piApprox :: (Integral a, Fractional b) => a -> b
piApprox n = 4 * sum [ (-1)^k / (2*k + 1) | k <- [0..n] ]
Run Code Online (Sandbox Code Playgroud)
它不起作用.然后,使用签名:
piApprox :: (Fractional a) => Int -> a
Run Code Online (Sandbox Code Playgroud)
但它再次引发了"无法演绎"错误.
如果我在解释器中运行此代码以找出最佳签名,结果是:
Prelude> let piApprox n = 4 * sum [ (-1)^k / (2*k + 1) | k <- [0..n] ]
Prelude> :t piApprox
piApprox :: (Fractional a, Integral a) => a -> a
Run Code Online (Sandbox Code Playgroud)
引发"类型变量`a0'是模糊的"错误.
现在,进行此计算的唯一方法是我可以想到包括Ratio包然后double通过使用转换为fromRational.
import …Run Code Online (Sandbox Code Playgroud)