是否有任何理由更喜歡以下其中一種符號或者這只是一個偏好問題?
map toLower "FOO"
fmap toLower "FOO"
toLower <$> "FOO"
順便說一句:我知道<$>
相同`fmap`
。假設map
只是fmap
的一般形式嗎?
是否有任何理由更喜歡以下其中一種符號或者這只是一個偏好問題?
map toLower "FOO"
fmap toLower "FOO"
toLower <$> "FOO"
順便說一句:我知道<$>
相同`fmap`
。假設map
只是fmap
的一般形式嗎?
如您所說,map
是fmap
的一般形式。如果你知道你有一個清單,那麼我會使用map
,因爲它使得代碼更清晰,如果你犯了一個錯誤,錯誤信息可能會更少混淆。但在很大程度上,這是一個偏好問題。
(<$>)
與fmap
相同。直到GHC 7.10它沒有被Prelude導出,所以默認情況下是不可用的 - 但即使使用舊的GHC版本,也很容易從Data.Functor
或Control.Applicative
導入,現在它幾乎成爲了執行此操作的標準方法。
我同意Ganesh的觀點,map
清單更清晰。我使用<$>
而不是fmap
,除非它部分應用。所以我會使用fmap reverse
來聲明一個反轉某些函數的所有元素的函數,但是如果我有所有可用的參數(例如,如果我在do
塊中寫入一行),我傾向於使用操作符表單:reverse <$> f x
我經常在中綴表示法中使用'fmap',例如:'reverse \'fmap \'x',因爲'fmap'在Prelude中,所以我沒有導入Control.Applicative。然後,如果我需要部分應用程序,我最終寫道:'f =(reverse \'fmap \')' – 2010-08-20 11:29:47
我發現使用'fmap'函數簡單明瞭(前綴)看起來更好,但也許這就是我但是,當我也使用'<*>'時,我確實使用'<$>'。 – mk12 2012-07-17 06:12:56
'liftM'與'fmap'相同,只是它在'Monad'而不是'Functor'上重載。 – 2010-08-20 11:30:11
[**'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
'<$>'由最近版本的前奏出口。 – fphilipe 2015-10-12 13:05:10