Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell类型签名错误_Haskell_Type Signature - Fatal编程技术网

Haskell类型签名错误

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

我的功能不起作用。我尝试了许多不同类型的签名。如果我删除类型签名,则它与点号“p”不起作用

如果我删除类型签名,我会得到:

: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