2016-04-13 16 views
0

私が取得しています:ハスケル:私のコードをコンパイルしようとすると予想されるタイプの実際の型と「IO t0の」「整数」と一致しませんでした

[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を指定いじり試してみましたIO、IOt、IOt0、intなどを含むさまざまな種類の束としてメインに入力されています。私は他の場所にある関数定義に基づいて、整数が関数に入力されていなければ他の機能のどれも適切に動作しないことに注意してください。私はどのようにメインに適切なタイプを置くか分からない。

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) 

答えて

5

main(通常Mainと呼ばれる)、メインモジュール内にある場合、それはタイプIO a(通常IO())を持っている必要があります。

bell 9はタイプがIntegerであるため、タイプが一致しません。あなたはIntegerIntegerprint :: Show a => a -> IO ()で印刷する必要があります。

main = print (bell 9) 

(/)ことがIntegerのために動作しない、あなたの代わりにdivを使用する必要があります。

| otherwise = factorial(n) `div` (factorial(n-k) * factorial(k)) 
関連する問題