2016-01-12 5 views
6

Belki de bu sormak için doğru yer değildir ve muhtemelen bu soru çok meta 'olmakla <*> (ve benzer <$>) işlevi infix olan bir neden var mı? Anlayışım ve bilgim (şimdiye kadar) Haskell için fmap ile aynıdır.Haskell'de neden bir infix işlevi <*> nedir?

Peki, neden fmap infix değil ama onun Uygulanabilir ve Funktör varyantı vardır?

+3

Birisi veya diğer '<$>', '<*>' ve '= <<' bütün varlık varyasyonları fonksiyonu üzerine uygulama hakkında yazdı. Bu yüzden onlara tüm belirsiz benzer sözdizimi vermek yardımcı olur. Cale Gibbard'ın (sanırım) söylediği gibi, diğer tüm uygulamalar bir arada bırakılırken, “$” nin doğru çağrıştırıcı olması talihsiz bir durum. – dfeuer

+1

'<*>' 'un fmap ile aynı olmadığını unutmayın: '<$>' aslında fmap için bir eşanlamlı ve '<*>' * fmap * gibi bir şey ama biraz farklı. – amalloy

cevap

13

Ben çoğunlukla bu deyim motive düşünüyorum: Bu çok daha az tatlı var önek fonksiyonları ile Spelt

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

ve hemen yazmaya buradan başlamak kaç uygulama bilmek gerekir:

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

elbette olabilir hala '' f 'fmap' x' ap' y 'ap' z'' yazma rağmen. – leftaroundabout

+10

@leftaroundabout Elbette. Ve bunu her zaman yapıyor olacaksanız, infix olarak kullanılabilecek işlev adlarını da seçebilirsiniz. –

+0

Ayrıca, tüm Aplikasyonlarda ve dolayısıyla tüm Monad'larda çalıştığı için, '<*>'',' ap'dan daha güçlü bir belirtime sahip olduğundan bahsetmeye değerdir, ancak 'Mon' sadece Monad'larda çalışır. – semicolon

İlgili konular