我目前正在学习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)
。
但我真的不明白哪个括号是不必要的
答案 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)
鉴于此,您现在应该能够解决这个问题了。