【发布时间】:2011-07-23 22:00:34
【问题描述】:
在查看 Haskell 时,我经常会看到类似的类型声明:
a -> (b -> c)
我知道它描述了一个函数,该函数接受 a 类型的内容并返回一个新函数,该函数接受 b 类型的内容并返回 c 类型的内容。我也明白类型是关联的(编辑:我错了 - 请参阅下面的 cmets),因此可以像这样重写上面的内容以获得相同的结果:
(a -> b) -> c
这将描述一个函数,该函数接受 a 类型的东西和 b 类型的东西并返回 c 类型的东西。
我还听说您可以通过切换箭头来对函数进行补充(编辑:真的,我在这里寻找的词是双重的 - 请参阅下面的 cmets):
a <- b <- c
我认为相当于
c -> b -> a
但我不确定。
我的问题是,这种数学的名称是什么?我想了解更多关于它的信息,这样我就可以用它来帮助我编写更好的程序。我有兴趣了解什么是互补函数,以及可以对类型声明执行哪些其他转换。
谢谢!
【问题讨论】:
-
a -> b -> c和a -> (b -> c)采用a并返回一个(采用b并返回c的函数),即它们采用两个参数。(a -> b) -> c接受一个(接受一个a并返回一个b的函数)并返回一个c,即它们接受一个参数。所以它们不等价!