繁体   English   中英

Haskell - 斗争理解类型

[英]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 -> bc -> 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM