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
精彩评论