什么是 haskell 的箭头结合性?

Ati*_*tin 1 haskell

我目前正在学习 haskell 并努力应对以下测试:假设我们有这样的类型:

type Endo a = a -> a
Run Code Online (Sandbox Code Playgroud)

我必须选择所有相当于 Endo (Endo Int)

(Int -> Int) -> (Int -> Int)
(Int -> Int) -> Int -> Int
Int
Int -> Int
Int -> Int -> Int -> Int
(Int -> Int) -> Int
Int -> Int -> (Int -> Int)
Int -> (Int -> Int)
Int -> Int -> Int
Run Code Online (Sandbox Code Playgroud)

由于 的类型Endo IntInt -> Int我知道我需要的类型有 4 个 Int,例如(Int -> Int) -> (Int -> Int)。但我不太明白哪个括号是不必要的

zch*_*zch 5

它在 Haskell 中是右结合的,因此以下是等效的:

a -> b -> c
a -> (b -> c)
Run Code Online (Sandbox Code Playgroud)

接受参数 a 和 b 的函数等价于给定参数 a 的函数返回接受参数 b 的函数。

它不是左关联的。

所以答案是前两个。