开发者

Haskell type cast problem

Example code:

fac :: Int → Int
fac 0 = 1
fac n = n * fac (n-1)

main = do
        putStrLn show fac 10

Error:

Couldnt match expected type 'String'
       against inferred ty开发者_StackOverflowpe 'a -> String'
In the first argument of 'putStrLn', namely 'show'
In the expression: putStrLn show fac 10


Let's add parentheses to show how this code is actually parsed:

(((putStrLn show) fac) 10)

You're giving show as the argument to putStrLn, which is wrong because show is a function and putStrLn expects a String. You want it to be like this:

putStrLn (show (fac 10))

You could either parenthesize it like that, or you can use the $ operator, which essentially parenthesizes everything to the right of it:

putStrLn $ show $ fac 10
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜