2010-08-20 87 views
36

是否有任何理由更喜歡以下其中一種符號或者這只是一個偏好問題?

map toLower "FOO" 

fmap toLower "FOO" 

toLower <$> "FOO" 

順便說一句:我知道<$>相同`fmap`。假設map只是fmap的一般形式嗎?

回答

39

如您所說,mapfmap的一般形式。如果你知道你有一個清單,那麼我會使用map,因爲它使得代碼更清晰,如果你犯了一個錯誤,錯誤信息可能會更少混淆。但在很大程度上,這是一個偏好問題。

(<$>)fmap相同。直到GHC 7.10它沒有被Prelude導出,所以默認情況下是不可用的 - 但即使使用舊的GHC版本,也很容易從Data.FunctorControl.Applicative導入,現在它幾乎成爲了執行此操作的標準方法。

+15

'liftM'與'fmap'相同,只是它在'Monad'而不是'Functor'上重載。 – 2010-08-20 11:30:11

+2

[**'liftA' **](http://hackage.haskell.org/package/base-4.7.0.1/docs/Control-Applicative.html#liftA)以及[**'Applicative' ** Functors](http://hackage.haskell.org/package/base-4.7.0.1/docs/Control-Applicative.html) – 2014-08-24 19:58:41

+0

'<$>'由最近版本的前奏出口。 – fphilipe 2015-10-12 13:05:10

12

我同意Ganesh的觀點,map清單更清晰。我使用<$>而不是fmap,除非它部分應用。所以我會使用fmap reverse來聲明一個反轉某些函數的所有元素的函數,但是如果我有所有可用的參數(例如,如果我在do塊中寫入一行),我傾向於使用操作符表單:reverse <$> f x

+1

我經常在中綴表示法中使用'fmap',例如:'reverse \'fmap \'x',因爲'fmap'在Prelude中,所以我沒有導入Control.Applicative。然後,如果我需要部分應用程序,我最終寫道:'f =(reverse \'fmap \')' – 2010-08-20 11:29:47

+1

我發現使用'fmap'函數簡單明瞭(前綴)看起來更好,但也許這就是我但是,當我也使用'<*>'時,我確實使用'<$>'。 – mk12 2012-07-17 06:12:56

相關問題