Haskell类型签名错误
我的功能不起作用。我尝试了许多不同类型的签名。如果我删除类型签名,则它与点号“p”不起作用 如果我删除类型签名,我会得到:Haskell类型签名错误,haskell,type-signature,Haskell,Type Signature,我的功能不起作用。我尝试了许多不同类型的签名。如果我删除类型签名,则它与点号“p”不起作用 如果我删除类型签名,我会得到: :t bTable bTable :: Integral a => a -> a -> a -> a 但如果我进去: bTable 50 0.8 10 我明白了 Unresolved overloading *** Type : (Fractional a, Integral a) => a *** Expression : b
:t bTable
bTable :: Integral a => a -> a -> a -> a
但如果我进去:
bTable 50 0.8 10
我明白了
Unresolved overloading
*** Type : (Fractional a, Integral a) => a
*** Expression : bTable 50 0.8 10
使用
fromIntegral
将ncr
的返回值转换为可以与Num a=>a
值相乘的值
bTable n p k = fromIntegral (ncr n k) * p^k * (1-p)^(n-k)
注意,该函数的推断类型为
bTable :: (Num a, Integral b) => b -> a -> b -> a
这与您尝试声明的类型略有不同(重命名约束以与上面的类型进行比较)
Haskell中没有自动类型转换。如果您有
a*b
,a
和b
必须是同一类型。您希望如何从0.8
中得到一个整数类型,以某个幂乘以另一个幂?
bTable n p k = fromIntegral (ncr n k) * p^k * (1-p)^(n-k)
bTable :: (Num a, Integral b) => b -> a -> b -> a
bTable :: (Num a, Integral b) => b -> a -> b -> b