2016-01-12 36 views
6

也許這不是正確的地方問,大概這個問題太'元'了,但是有什麼理由<*>(和類似<$>)函數是中綴?根據我的理解和我對Haskell的瞭解(迄今爲止),它和fmap一樣。爲什麼<*>是Haskell中的中綴函數?

那麼,爲什麼fmap不是中綴,但它的Applicative和Functor變體是?

+3

有人或其他人寫了關於'<$>','<*>'和'= <<'都是功能應用程序的變體。所以給他們所有模糊的語法是很有幫助的。正如Cale Gibbard(我認爲)所說的,不幸的是'$'是正確的聯想,而所有其他類型的應用程序都是關聯的。 – dfeuer

+1

請注意,'<*>'與fmap不同,相反,'<$>'實際上是fmap的同義詞,'<*>'與fmap *很像,但有點不同。 – amalloy

回答

13

我認爲這主要是由這個成語的動機:

f <$> x <*> y <*> z 

前綴功能拼寫這是少了很多漂亮的,你需​​要知道有多少應用,有剛開始打字:

ap (ap (fmap f x) y) z 
+3

雖然你當然可以寫''f'fmap' x'ap'''ap' z''。 – leftaroundabout

+10

@leftaroundabout當然。如果你一直在做這個,你不妨選擇可以使用中綴的函數名稱。 –

+0

值得一提的是,'<*>'比'ap'具有更強的規範,因爲它適用於所有應用程序,因此所有Monad,但'ap'只適用於Monads。 – semicolon