我有一个非常简单的函数叫做'fold',它接受一个函数f并执行它。给定一个函数'add'和它调用的两个数字加上这两个数字并显示结果。但是由于下面的编译错误,我无法编译它。具体说明的错误是什么,我该怎么做才能解决它?
module Main where
add x y = x + y
--fold :: ((a,b)->c) -> a->b->c
fold f n x = f n x
main :: IO ()
main = do
fold add 2 3
答案 0 :(得分:6)
问题是您已将main
(正确)声明为类型为IO ()
,但fold
未返回该类型。错误消息稍微复杂一点,因为在理论中,add
(因此fold
)可以返回类型IO ()
的值,因为{{1} }可以返回任何带有add
实例的类型。但是,Num
不是 IO ()
的实例。解决方案是返回从Num
的返回值创建的IO操作。一种方法是使用fold
函数(它使用print
实例获取任何值,并在输出之前将其转换为Show
。
String