这个问题在这里已经有了答案:
Why does Haskell's "flip id" has this type?
(1 个回答)
6年前关闭。
为什么是 flip id
接受为有效表达?它不应该在 a
的类型检查中失败吗?反对 b -> c
?
Prelude> :t flip
flip :: (a -> b -> c) -> b -> a -> c
Prelude> :t id
id :: a -> a
Prelude> :t flip id
flip id :: b -> (b -> c) -> c
最佳答案
重点是
id :: a -> a
适用于任何类型
a
,包括函数类型。即我们可以选择a = (b -> c)
并获得id :: (b -> c) -> (b -> c)
其中,因为
->
右侧的关联,通常写为id :: (b -> c) -> b -> c
上面的可以解释为一个带有两个参数的函数:第一个类型
b -> c
和第二个类型 b
.所以我们可以flip
它。
关于haskell - `flip id` 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29489905/