gpt4 book ai didi

Haskell - 努力理解类型

转载 作者:行者123 更新时间:2023-12-02 11:17:06 25 4
gpt4 key购买 nike

我是 Haskell 的新手,但到目前为止它真的很有趣。目前我正在努力理解类型和类型类

示例:add::Integer -> Integer -> Integer-> 是右关联的,这意味着声明类似于 Integer -> (Integer -> Integer),到目前为止一切顺利。但是 (a->b) -> a -> b 是什么意思?为什么我们突然使用括号?在我的教科书中,有一个此声明的示例,其中包含带有 def 的函数 apply::(a->b)-> a->b应用 f x = f x。但我不明白, (a->b) 不是一个函数吗?

我知道a和b是类型变量,这表明a和b是不同的类型。

最佳答案

每当您在类型签名中看到括号时,您都可以将其视为一个 block 。因此 (a -> b) -> a -> bc -> a -> b 相同,其中 c 代表 a -> bc 恰好是一种本身就是函数的类型。

与第一个示例 Integer -> (Integer -> Integer) 相同,它是一个接受 Integer 并返回函数 Integer -> Integer 的函数;你的函数 (a -> b) -> a -> b 是一个以函数 a -> b 和参数 a 作为参数的函数code> 以便返回 b

就这个函数apply而言,它只是函数应用程序。如果apply定义为apply f x = f x,它只是将参数x传递给函数f。顺便说一句,这个函数已经存在于 Prelude 中,名为 ($)

关于Haskell - 努力理解类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44097362/

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