我刚刚开始编写Haskell编程,主要是因为我在寻找一种比C#更强大的数学语言,而且现在我很困惑。
现在我正试图简单地找到4的阶乘并打印出来,这是我到目前为止写的:
fact n = product [1..n]
main = do
print fact 4
当我尝试调试它时,我得到了
错误:(3,8)ghc:无法匹配预期类型
a1 -> t0' with actual type
IO()' 函数print' is applied to two arguments, but its type
(a0 - > a0) - > IO()'只有一个 在'do'块的stmt中:print fact 4 在表达式中:do {print fact 4}
我做错了什么?
答案 0 :(得分:9)
你需要括号:
main = do
print (fact 4)
GHC看到的是fact
和4
作为print
的单独参数传递,但您想要的是将4
应用于fact
,然后将该结果应用于print
。你也可以使用
main = do
print $ fact 4
$
运算符本身并没有执行任何操作,但它的优先级非常低,例如+
的优先级低于*
,并且它与是的,所以你可以写点像
f $ g . h $ m 1 $ 2 + 3
而不是
f ((g . h) (m 1 (2 + 3)))