使用无点表示法定义`id`函数

red*_*dot 3 haskell functional-programming pointfree

在Haskell语言函数中id定义为组合单位:

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

有没有办法id使用无点表示法定义haskell' 函数?我的意思是不要像以下那样直接引用它:

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

chi*_*chi 16

无点版本id是......好吧,id.id通常被视为无点构造中的基本运算符,这是一种构造更多组合符的原语.

如果你真的想要,你可以id从其他更复杂的运算符重建,例如利用Monad ((->) a)实例:

id = join const
Run Code Online (Sandbox Code Playgroud)

或者Applicative ((->) a)实例

id = const <*> const
Run Code Online (Sandbox Code Playgroud)

(在组合的逻辑,这是I = S K K因为<*>IS SconstK)

但是,没有比这更简单的了id.