Haskell - 将函数作为参数编译错误传递

时间:2016-04-26 16:23:56

标签: haskell

我有一个非常简单的函数叫做'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

enter image description here

1 个答案:

答案 0 :(得分:6)

问题是您已将main(正确)声明为类型为IO (),但fold未返回该类型。错误消息稍微复杂一点,因为在理论中,add(因此fold)可以返回类型IO ()的值,因为{{1} }可以返回任何带有add实例的类型。但是,Num 不是 IO ()的实例。解决方案是返回从Num的返回值创建的IO操作。一种方法是使用fold函数(它使用print实例获取任何值,并在输出之前将其转换为Show

String