[英]Haskell - Struggle understanding types
我是Haskell的新手,但直到现在它真的很有趣。 目前我正致力于理解类型和类型类
示例: add :: Integer -> Integer -> Integer
。 ->
是右关联,这意味着声明类似于Integer -> (Integer -> Integer)
,到目前为止一直很好。 但是(a->b) -> a -> b
是什么意思? 为什么我们突然使用括号? 在我的教科书中,这个声明的例子有一个函数apply::(a->b)-> a->b
with def。 apply fx = fx
。 但我不明白,是不是(a->b)
单一功能?
我知道a和b是Typevariables,表明a和b是不同的类型。
每当您在类型签名中看到括号时,您都可以将其视为一个块。 所以(a -> b) -> a -> b
与c -> a -> b
相同,其中c
代表a -> b
。 c
恰好是一个函数本身的类型。
你的第一个例子Integer -> (Integer -> Integer)
就是一个函数,它接受一个Integer
并返回一个函数Integer -> Integer
; 你的函数(a -> b) -> a -> b
是一个函数,它将函数a -> b
和参数a
作为参数,以便返回b
。
在这个功能的情况下apply
它只是功能应用程序。 如果apply
被定义为apply fx = fx
它只是将参数x
传递给函数f
。 顺便说一下,这个函数已经存在于Prelude中并被称为($)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.