中扣除函數所以我今天在玩Haskell,考慮給定類型的函數定義的自動生成。Haskell:從類型
例如,函數
twoply :: (a -> b, a -> c) -> a -> (b, c)
是明顯,我給出的類型(如果我排除使用undefined :: a
)的定義。
於是我想出了以下內容:
¢ :: a -> (a ->b) -> b
¢ = flip ($)
其具有
(¢) ¢ ($) :: a -> (a -> b) -> b
這讓我想起了我的問題的有趣的屬性。鑑於與「具有相同類型」的關係=::=
,陳述x =::= x x ($)
是否唯一定義了x
的類型?必須x =::= ¢
,還是存在x
另一種可能的類型?
我試過從x =::= x x ($)
後退工作推斷x :: a -> (a -> b) -> b
,但陷入困境。
sepp2k回答了你的問題,但值得注意的是'flip id'是你的''''的一個等價定義,使得你注意到的屬性的原因更加明顯(至少對我而言)。 – 2010-09-17 00:11:12
這是古怪而可怕的 – rampion 2010-09-17 00:46:32
換句話說,冒着過度解釋它的風險,專用於函數的'id :: a - > a'相當於'($)::(a - > b) - >( a - > b)'。多態不是很好嗎? – 2010-09-17 21:12:34