2017-02-11 21 views
0

目前我正在学习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 IntInt -> Int我知道我需要的类型有4个Ints,如(Int -> Int) -> (Int -> Int)。 但我不明白哪一个括号是不必要的

回答

3

这是在Haskell右结合的,所以下面是等价的:

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

函数,它的参数a和b相当于函数参数给出一个返回函数,它的参数湾

它不是左结合的。

所以答案是前两个。

0

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

只是记得->联系人右边,即

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

鉴于这种情况,你现在应该能够解决的锻炼。