gpt4 book ai didi

haskell - 理解 Haskell 函数签名

转载 作者:行者123 更新时间:2023-12-03 06:23:15 24 4
gpt4 key购买 nike

我是 Haskell 世界的新手,我在函数签名方面遇到了一些麻烦:

这在简单的世界中意味着什么:

add:: Integer -> Integer -> Integer

这是否意味着前两个参数是Integer并且返回值也是Integer

你能解释一下,使用箭头来确定参数类型的目的,或者至少给我一个关于这个函数签名的简短解释吗?

最佳答案

通俗地说,我们确实可以将 add 称为一个接受两个 Integer 并生成一个 Integer 的函数。然而,要理解这种表示法,您需要了解,从技术上讲,Haskell 中不存在带有两个参数的函数之类的东西。

相反,每个函数都只接受一个参数,并且函数的类型写作 a -> r,其中 a 是参数的类型,r 是结果的类型。函数箭头是右关联的,这意味着类型 a -> (b -> c) 可以不带括号写为 a -> b -> c

因此,Integer -> Integer -> IntegerInteger -> (Integer -> Integer) 相同,它告诉我们 add 是一个接受 Integer 并生成另一个 Integer -> Integer 类型函数的函数。这称为柯里化(Currying),是 Haskell 中“编码”多参数函数的常用方法。

要调用这样的柯里化(Currying)函数,我们可以编写 add 1 2,因为函数应用是左关联的,所以它与 (add 1) 2 相同,首先调用 add 1 获取 Integer -> Integer 类型的函数,然后将该函数应用于参数 2

关于haskell - 理解 Haskell 函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com