Haskell中的多态函数

Haskell中的多态函数,haskell,Haskell,拥有一个参数多态函数foo::a->a->a。给出四个参数,使得到的表达式 foo arg1 arg2 arg3 arg4将具有类型Bool -- foo :: a -> a -> a function is defined in a code arg1 = undefined arg2 = undefined arg3 = undefined arg4 = undefined 这里只是一个提示 函数foo接受两个参数,因为它的类型是a->a->a。但是,foo arg1 arg

拥有一个参数多态函数
foo::a->a->a
。给出四个参数,使得到的表达式
foo arg1 arg2 arg3 arg4
将具有类型
Bool

-- foo :: a -> a -> a function is defined in a code 
arg1 = undefined
arg2 = undefined
arg3 = undefined
arg4 = undefined
这里只是一个提示

函数
foo
接受两个参数,因为它的类型是
a->a->a
。但是,
foo arg1 arg2 arg3 arg4
传递四个参数。这怎么行

那么,我们可以将
foo arg1 arg2 arg3 arg4
解释为

let bar = foo arg1 arg2
in bar arg3 arg4
只有当
foo arg1 arg2
的结果是一个需要两个参数的函数(
bar
)时,这才有效。但是我们知道
bar
的类型必须是
a
而不是
foo
的类型。因此,类型变量
a
必须选择为二进制函数的类型,即类似
b->c->d
的类型

总之,如果
foo::a->a->a
,那么我们还有

foo :: (b -> c -> d) -> (b -> c -> d) -> (b -> c -> d)

arg1,arg2,arg3,arg4::a->a->BoolI我投票结束这个问题,因为这是家庭作业。不是一个真正的编程问题。@mb14。。。作业问题在SOhint上没有问题:假设函数没有作弊-它所能做的就是选择返回它的一个参数和
foo arg1 arg2 arg3 arg4=(((foo arg1)arg2)arg3)arg4