Haskell:无法匹配期望的类型' IO t0'实际类型'整数'

时间:2016-04-13 20:26:30

标签: haskell functional-programming type-mismatch

在尝试编译我的代码时,我得到了:

[1 of 1] Compiling Main             ( survey2.hs, survey2.o )

survey2.hs:20:1:
    Couldn't match expected type ‘IO t0’ with actual type ‘Integer’
    In the expression: main
    When checking the type of the IO action ‘main’

我已经尝试过指定' 9'那是作为一堆不同类型输入到main,包括IO,IO t,IO t0,int等。我理解基于我在其他地方的函数定义,如果一个Integer没有输入到该函数中没有其他功能可以正常工作。我不确定如何将正确的类型放入主体。

factorial:: Integer -> Integer
factorial n
  | n <= 1    = 1 
  | otherwise =  n * factorial(n-1)

binomial :: (Integer, Integer) -> Integer
binomial (n, k)
  | k > n     = 0 
  | k < 0     = 0 
  | otherwise = factorial(n) / (factorial(n-k) * factorial(k))

bell :: Integer -> Integer
bell n
  | n <= 1    = 1 
  | otherwise = sum [ binomial(n-1, k-1)  * bell (k-1) | k<-[0..n-1] ] 

bellSum :: Integer -> Integer  
bellSum n = sum [ bell(k) | k<-[0..n] ]

main = bell(9 :: Integer )

1 个答案:

答案 0 :(得分:5)

如果main位于主模块中(通常称为Main),则其类型必须为IO a(通常为IO ())。

由于bell 9类型Integer,因此类型不匹配。您需要使用Integer print :: Show a => a -> IO ()打印Integer

main = print (bell 9)

请注意,(/)不适用于Integer,您需要使用div代替:

| otherwise = factorial(n) `div` (factorial(n-k) * factorial(k))