Haskell - 将函数及其参数作为单独的参数传递

时间:2015-06-27 16:09:36

标签: function haskell arguments

我想分别传递函数及其参数

现在我有了一个函数,让我们调用它myfunc,它只需要一个参数。

我有另一个函数(func2),它接受多个参数,其中最后两个是函数(f)及其参数(a)。我不能把它们分开,因为我需要它们分开。

(...表示其他参数)

我成功了(情景一):

func2 ... myfunc args

但是当我尝试做的时候(将SCENARIO I作为主要func2的最后两个参数传递):

func2 ... func2 (... myfunc args)

我收到错误。我相信myfunc正在评估,第二个func2正在丢失参数。怎么办?

1 个答案:

答案 0 :(得分:3)

当你遇到类型错误时,首先要做的是检查所有涉及的表达式的类型。您的func2有类型

func2 :: Int -> (a -> a) -> a -> a

因此情景#1中的完整表达式将类似于

func2 n myfunc args
对于某些n :: Int

myFunc :: a -> aargs :: aa。那么你想做一些m :: Int

func2 m func2 (n myfunc args)

但类型不匹配。 func2不是a -> a函数;你需要提供前两个参数来获得一个(顺便说一句,你也可以将func2的类型读作Int -> (a -> a) -> (a -> a) - 两个参数的函数导致a -> a函数)。至于最后一个论点,n myfunc args意味着将n应用于myfuncargs,这将不起作用nInt ,甚至不是一个功能。您只想传递场景#1的完整表达式,它具有预期的a类型。所以场景#2可能是:

func2 m (func2 m myfunc) (func2 n myfunc args)

这至少会超过类型检查器。