什么是哈斯克尔的箭头关联性?

时间:2017-02-11 19:06:57

标签: haskell

我目前正在学习haskell并且正在努力进行以下测试: 假设我们有这样一种类型:

type Endo a = a -> a

我必须选择所有类似于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

由于Endo Int的类型为Int -> Int我理解我需要的类型有4个{I},例如(Int -> Int) -> (Int -> Int)。 但我真的不明白哪个括号是不必要的

2 个答案:

答案 0 :(得分:3)

在Haskell中它是正确的关联,所以跟随是等价的:

a -> b -> c
a -> (b -> c)

带参数a和b的函数等效于给定参数a的函数返回带参数b的函数。

它不是关联的。

所以答案是前两个。

答案 1 :(得分:0)

你的直觉是正确的:(Int -> Int) -> (Int -> Int)确实是Endo (Endo Int)

请回忆一下->右边的同伙,即

a -> b -> c     means    a -> (b -> c)

鉴于此,您现在应该能够解决这个问题了。