Haskell类型转换问题

Dob*_*lot 4 haskell types casting

示例代码:

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

main = do
        putStrLn show fac 10
Run Code Online (Sandbox Code Playgroud)

错误:

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
Run Code Online (Sandbox Code Playgroud)

Chu*_*uck 25

让我们添加括号来显示如何实际解析此代码:

(((putStrLn show) fac) 10)
Run Code Online (Sandbox Code Playgroud)

你给出show了参数putStrLn,这是错误的,因为它show是一个函数并且putStrLn需要一个String.你希望它是这样的:

putStrLn (show (fac 10))
Run Code Online (Sandbox Code Playgroud)

你可以像这样用括号括起来,或者你可以使用$运算符,它基本上将括号内的所有内容括起来:

putStrLn $ show $ fac 10
Run Code Online (Sandbox Code Playgroud)