这是什么类型的数学:a - > b - > c

bma*_*ddy 7 math monads haskell types

在查看Haskell时,我经常会看到与此类似的类型声明:

a -> (b -> c)
Run Code Online (Sandbox Code Playgroud)

我理解它描述了一个函数,它接受类型为a的东西并返回一个新函数,它接受类型为b的东西并返回类型为c的东西.我也明白类型是关联的(编辑:我错了 - 看下面的评论),所以上面的内容可以像这样重写,以获得相同的结果:

(a -> b) -> c
Run Code Online (Sandbox Code Playgroud)

这将描述一个函数,它接受类型为a的东西和类型为b的东西并返回类型为c的东西.

我还听说你可以通过切换箭头来补充(编辑:真的,我在这里找到的词是双重的 - 请参阅下面的评论)到函数:

a <- b <- c
Run Code Online (Sandbox Code Playgroud)

我认为相当于

c -> b -> a
Run Code Online (Sandbox Code Playgroud)

但我不确定.

我的问题是,这种数学的名称是什么?我想了解更多关于它的信息,以便我可以用它来帮助我编写更好的程序.我有兴趣学习类似于补充函数的东西,以及可以对类型声明执行的其他转换.

谢谢!

sth*_*sth 10

类型声明不是关联的,a -> (b -> c)不等同于(a -> b) -> c.此外,你不能"切换"箭头,a <- b <- c是无效的语法.

通常的参考相关性是在这种情况下即->右结合,这意味着a -> b -> c被解释为a -> (b -> c).


H.B*_*.B. 5

从广义上讲,这属于Lambda微积分领域.

由于这种表示法与函数类型有关,因此类型推断可能也会引起您的兴趣.

(关于关联性的错误假设应该已经被其他答案充分清除,所以我不会重申这一点)

  • 特别是,这是"打字的lambda演算".在常规的lambda演算中,只有一个"类型".是的,它与类别理论有关,特别是与拓扑理论有关.(这是因为在类别理论中,对象和函数是分离的想法,但在Topos理论中,存在一个函数的"内部"概念. (4认同)