Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 type 'a -> String'
In the first argument of 'putStrLn', namely 'show'
In the expression: putStrLn show fac 10
like image 718
DobPilot Avatar asked Nov 28 '22 04:11

DobPilot


1 Answers

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
like image 63
Chuck Avatar answered Dec 09 '22 15:12

Chuck