use*_*258 2 haskell types higher-order-functions
我是Haskell的新手,但直到现在它真的很有趣.目前我正致力于理解类型和类型类
示例:add :: Integer -> Integer -> Integer.->是正确的联想,这意味着声明类似Integer -> (Integer -> Integer),到目前为止一直很好.但是什么(a->b) -> a -> b意思呢?为什么我们突然使用括号?在我的教科书中,这个声明的一个例子是apply::(a->b)-> a->b带有def 的函数.apply f x = f x.但我不明白,是不是(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 f x = f x它只是将参数传递x给函数f.顺便说一下,这个函数已经存在于Prelude中并被调用($).