我使用的是@DavidYoung提供的here。我有一个函数:
hypergeom ::
forall a. (Eq a, Fractional a, BaseFrac a)
=> Int -- truncation weight
-> BaseFracType a -- alpha parameter (usually 2)
-> [a] -- "upper" parameters
-> [a] -- "lower" parameters
-> [a] -- variables (the eigenvalues)
-> IO a
但是当我用a = Complex Rational
运行它时,我得到这个错误:
No instance for (RealFloat (Ratio Integer))
arising from a use of `hypergeom'
那是什么意思?
更准确地说,下面是我运行的命令:
ghci> import Data.Ratio
ghci> import Data.Complex
ghci> alpha = 2 % 1 :: Rational
ghci> a = 2 % 10 :+ 1 % 1 :: Complex Rational
ghci> b = 1 % 2 :+ 0 % 1 :: Complex Rational
ghci> c = 2 % 1 :+ 3 % 1 :: Complex Rational
ghci> x1 = 1 % 3 :+ 1 % 4 :: Complex Rational
ghci> x2 = 1 % 5 :+ 1 % 6 :: Complex Rational
ghci> hypergeom 10 alpha [a, b] [c] [x1, x2]
<interactive>:28:1: error:
* No instance for (RealFloat (Ratio Integer))
arising from a use of `hypergeom'
* In the expression: hypergeom 10 alpha [a, b] [c] [x1, x2]
In an equation for `it':
it = hypergeom 10 alpha [a, b] [c] [x1, x2]
我很确定这在过去是有效的,但是我使用了Data.Complex.Generic
(我不再使用它了,因为它不可能与最近的解析器)。
2条答案
按热度按时间ccgok5k51#
还没有运行代码,但很确定问题是这样的:
使用
hypergeom
需要一个Fractional a
示例。Complex
的相关示例为:所以,我们需要一个
RealFloat Rational
示例。但是Rational = Ratio Integer
。所以我们需要一个RealFloat (Ratio Integer)
示例。在作用域中没有这样的示例。因此,出错。nfeuvbwi2#
我发现了一个窍门。人们可以使用 * 分圆 * 数。它们包含有有理真实的和虚部的复数。
例如: