Bu, applicative style için mükemmel bir kullanım örneğidir. buna da functors çalışır böylece "kaldırma" işlevi uygulaması olarak (<$>
ve <*>
kullanarak) uygulamalı tarzı
Node <$> numberNode x <*> numberTree t1 <*> numberTree t2
Think ile (Control.Applicative
aktardıktan sonra) tüm pasajı yerini alabilir. Eğer zihinsel olarak <$>
ve <*>
göz ardı ederseniz, normal fonksiyon uygulamasına çok benziyor!
Uygulama stili, saf bir işleve sahip olduğunuzda ve bunu geçersiz argümanlar (ya da herhangi bir functor argümanı, gerçekten) vermek istediğinizde yararlıdır - temelde sorunuzda belirttiğiniz şeyi yapmak istediğinizde!
<$>
tipi imza (bu durumda numberNode x
olarak) ve bir funktor değeri (bu durumda Node
olarak) saf fonksiyon alan anlamına gelir
(<$>) :: Functor f => (a -> b) -> f a -> f b
ve bu sarılmış yeni bir fonksiyon oluşturur "iç" bir functor. Sen Gördüğünüz gibi tip imzasını
(<*>) :: Applicative f => f (a -> b) -> f a -> f b
olan, <*>
ile bu işleve başka argümanlar ekleyebilir, bu sadece işlev funktor "içeride" sarılır bile çalışır <$>
çok benzer.
fmap :: Functor f => (a -> b) -> f a -> f b
geçerli:
(<$>) :: Functor f => (a -> b) -> f a -> f b
sadece fmap benziyor:
Teşekkür. Nedenini bilmiyorum, ama bu basit çözümden henüz değildim. – floAr
Rica ederim! –