2015-01-09 5 views
6

($) kullanımı:Haskell'ın fonksiyon uygulama operatörü Onun aşağıdaki işlevi tanımlar burada Bartosz Milewski tarafından bir parça okuyorum

instance Applicative Chan where 
    pure x = Chan (repeat x) 
    (Chan fs) <*> (Chan xs) = Chan (zipWith ($) fs xs) 

Neden parantez içinde fonksiyon uygulama operatörüdür? Bunun normalde bir önek gösterimi formunda bir infix işlevini kullanmak için yapıldığını anlıyorum, fakat nedenini anlamıyorum, bu durumda işlev sadece Chan (zipWith $ fs xs) olarak ifade edilemedi ve aradaki farkın ne olduğunu merak ediyorum ikisi.

(hala bağlamı gerekiyorsa, article bakınız) Bu durumda

+1

benziyordu olabilirdi

apply = ($) 

: Aşağıdaki tanım mı? Mevcut uygulama ile tamamen aynı. – Carl

+0

Unutmayın ki, ($) 'bazı büyülü ilkel operatör değil:' (+) 've' veya 'gibi bir fonksiyon. – AJFarmar

cevap

13

, $zipWith için geçirilir ediliyor. Bu parantez olmadan

zipWith (\ f x -> f x) fs xs 

yazma aynıdır, öyle typecheck gitmiyor

zipWith (fs xs) 

eşdeğer olurdu.

Parantez içindeki bir işleç, normal bir tanımlayıcı gibi davranır. kod `Chan (zipWith id fs xs)` olarak yazılmıştır eğer her hangi bir basit olurdu

zipWith apply fs xs 
+2

Özellikle, haskell dilbilgisi '' zipWith ' 'ifadesidir. '($)' infix işlecinin '$' * önekine dönüştürüldüğünden biraz farklı olan bir * ifadesine * dönüştürüldüğünü, ve önek işlevi olarak kullanımın ve diğer işlevlere bir argüman olarak kullanılmasını sağlar. –

İlgili konular