是否可以在`flip`中使用一元函数而不是二元函数?

Tom*_*rek 10 haskell functional-programming flip

Prelude功能的类型flip是:

flip :: (a -> b -> c) -> b -> a -> c
Run Code Online (Sandbox Code Playgroud)

即,它需要一个二进制函数和两个参数.

Prelude功能的类型id是:

id :: a -> a
Run Code Online (Sandbox Code Playgroud)

但是类型flip id是:

flip id :: a -> (a -> b) -> b
Run Code Online (Sandbox Code Playgroud)

这怎么可能应用flipid的时候id是一个一元函数,并flip要求对第一个参数二元函数?

顺便说一句.flip id类似于\ x f -> f x

Nef*_*byr 15

Haskell 通过设置id使第一个参数的类型适合.所以:flipa = b -> c

flip :: ( a       -> b -> c) -> b ->  a       -> c
flip :: ((b -> c) -> b -> c) -> b -> (b -> c) -> c
flip id ::                      b -> (b -> c) -> c
Run Code Online (Sandbox Code Playgroud)

在哪里id被认为是类型

id :: (b -> c) ->  b -> c
Run Code Online (Sandbox Code Playgroud)

这相当于

id :: (b -> c) -> (b -> c)
Run Code Online (Sandbox Code Playgroud)

即专门化id仅适用于一元函数.

编辑:我想我可能会改写我的第一行:
Haskell的推断id适合的第一个参数的类型flip ,如果 a = b -> c.
如果有更清楚的话.