我注意到(尽管有人告诉我 (a -> a)
和 a -> a
意思相同),但当我使用 (a -> a)
时会收到错误消息。 .我应该只使用 (a -> a)
在类型中使用括号时? (即 (5 + 3)
而不是 5 + 3
)?只是不太确定何时需要
最佳答案
(a -> a)
和 a -> a
单独是一样的,
ff :: (a -> a) -- this compiles
ff = id
gg :: a -> a
gg = id
h :: a -> a -> Bool
h _ _ = True
i = h ff gg -- this compiles => ff & gg are of the same type.
但与更多类型结合时会有所不同,例如:
a -> a -> b
(a -> a) -> b
这是因为
->
是右结合的,所以 a -> a -> b
实际上意味着 a -> (a -> b)
(取一个 a
并返回一个函数),这与 (a -> a) -> b
不同(获取一个函数并返回一个 b
)。这就像
(1+2)*3
不同于 1+2*3
.
关于function - (a -> a) 和 a -> a 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5875896/