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)