具有参数化多态函数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
答案 0 :(得分:3)
这里只是一个提示。
函数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)