views:

168

answers:

1

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 type 'a -> String'
In the first argument of 'putStrLn', namely 'show'
In the expression: putStrLn show fac 10
+24  A: 

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
Chuck
+1 `$` is your friend.
Chris Lutz
($) and (.) are your loving friends <3
codebliss