Haskell中的多态函数

时间:2016-03-27 10:07:38

标签: 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

1 个答案:

答案 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)