Haskell类型转换问题

4

示例代码:

fac :: IntInt
fac 0 = 1
fac n = n * fac (n-1)

main = do
        putStrLn show fac 10

错误:

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
1个回答

25

让我们添加括号来显示这段代码实际上是如何解析的:

(((putStrLn show) fac) 10)

你把show作为参数传递给了putStrLn,这是错误的,因为show是一个函数,而putStrLn期望得到一个字符串。你需要把它改成这样:

putStrLn (show (fac 10))
你可以像那样使用括号,或者你可以使用 $ 操作符,它本质上是将其右侧的所有内容加括号:
putStrLn $ show $ fac 10

($)和(.)是你可爱的朋友 <3 - codebliss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接