2016-05-01 48 views
2

免責聲明:我是purescript的新手,還沒有找到令人驚歎但有點壓倒性的類型系統。定義常量函數的習慣用法

說我想要一個忽略它的參數並始終返回相同值的函數。手動定義這是一個匿名函數是沒有問題的:

(\_ -> 42) <$> [true, false] 
-- => [42, 42] 

但我不知道是否有這樣做的更地道(和簡潔)的方式。 Data.Const可能涉及,但我還沒有弄清楚如何使用它。類似(getConst 42) <$> [true, false]不起作用。

編輯:定義這個自己:

makeConst :: forall a b. a -> (b -> a) 
makeConst x = (\_ -> x) 

(makeConst 42) <$> [true, false] 
-- => [42, 42] 

這工作得很好,但如果這樣的事情在標準模塊存在,我根本沒看出來我也不會感到驚訝?

+1

我想你想const函數:'(const 42)<$> [true,false]' – Lee

+0

是的,就是這樣。猜猜我應該在發佈之前閱讀Prelude函數。介意讓這個答案能讓我接受它? –

+2

在你的''const 42 <$> [true,false]'的具體例子中有FYI',在purescript-control中有'Data.Functor'的'<$' and '$>'組合器。這樣使用:'42 <$ [true,false]'和'[true,false] $> 42'。參考:https://pursuit.purescript.org/packages/purescript-control/0.3.2/docs/Data.Functor#v:(<$) – LiamGoodacre

回答

3

你想要const功能

const :: forall a b. a -> b -> a 

,你可以用它來創建你的函數:

(const 42) <$> [true, false]