function - (a -> a) 和 a -> a 之间的区别

标签 function haskell syntax definition function-declaration

我注意到(尽管有人告诉我 (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/

相关文章:

c - ispalindrome C,检查空间的问题

haskell - 重新加载文件时自动将变量状态重新加载到 GHCi 中

haskell - 我可以在 Free Monad 的 Show 实例中消除 UndecidableInstances 的使用吗?

c++函数调用函数不起作用

python - 如何将随机函数作为参数传递?

function - Haskell 中的“辅助”函数

关于函数的 Javascript 语法

c++ - 当 C/C++ 中的数字常量以 0 为前缀时,这意味着什么?

c++ - 没有匹配的函数要调用:错误:必须使用 ‘.*’或 ‘->*’来调用 ‘f (…)’中的指针成员函数,例如 ‘(… ->* f) (…)’

javascript - JavaScript 中的 "function*"是什么?