讀優秀CoffeeScript Ristretto,我就遇到了這個功能:轉換CoffeeScript的高階函數到哈斯克爾
((x) ->
(y) ->
x
)(1)(2)
我的理解是,結果x
是一樣的輸入x
。
Haskell版本(*)看起來像這樣嗎? 。
foo :: a -> b -> (a -> b) -> a
foo x y f = x
*注 - 我不知道是否有給Haskell的穩健型系統V 1-1翻譯的CoffeeScript
讀優秀CoffeeScript Ristretto,我就遇到了這個功能:轉換CoffeeScript的高階函數到哈斯克爾
((x) ->
(y) ->
x
)(1)(2)
我的理解是,結果x
是一樣的輸入x
。
Haskell版本(*)看起來像這樣嗎? 。
foo :: a -> b -> (a -> b) -> a
foo x y f = x
*注 - 我不知道是否有給Haskell的穩健型系統V 1-1翻譯的CoffeeScript
我認爲你正在尋找const
:
const :: a -> b -> a
const
的「功能」看起來就是對於所有的x :: a
,const x
是b -> a
類型的常數函數 - 它返回任何值的x
。
一種可能的實現是:
const x y = x
所以const 1 2 == 1
。
看起來像一個直接翻譯到Haskell是
(\x -> \y -> x) 1 2
所以,你可以定義foo
作爲
foo = \x -> \y -> x
這是const
,由@Benesh指出。
爲什麼你的'foo'有三個參數? –
啊,我想我忘記了哈斯克爾的所有功能都是咖喱的。因此'foo :: a - > b - > a'(如[@Benesh](http://stackoverflow.com/users/2212478/benesh)指出的)與上述CoffeeScript函數相同。但是,正如我剛剛閱讀的,這裏使用了閉包。所以,我不確定Haskell版本是否等價... –
是否'foo = \ x-> \ y - > x'或'(\ x - > \ y - > x)1 2'看起來更像你原來的功能? –