Evet, örneğin flip :: (a -> b -> c) -> b -> a -> c
denir flip (>) 3 5 == True
. Hacker'da daha fazla bilgi ve kaynak: flip. Ne istiyorsun
doğru, fonksiyon uygulamanın argümanları ters basitçe? Eh, ($)
fonksiyon uygulaması olduğundan, çevirme kullanarak flip ($) :: b -> (b -> c) -> c
yazabilirsiniz. Ne olduğunu görelim. İşte iki prelude fonksiyonları için kaynağıdır: Birlikte türlerini koymak Yani eğer
-- from Hackage:
($) :: (a -> b) -> a -> b
f $ x = f x
-- from Hackage:
flip :: (a -> b -> c) -> b -> a -> c
flip f x y = f y x
, temelde, flip ($)
flip ($) ::
b -> -- type of x, argument of y and second argument of ($)
(b -> c) -> -- type of y, function applied by ($) as its first argument
c -> -- result of the application "y x"
olur sen fonksiyonların gerçek tanımları izleyin:
flip ($) = (\f x y -> f y x) ($) -- from flip's def.
= \x y -> ($) y x -- partial application
= y x -- from ($)'s def.
Vay, id' en 'bir nasıl' çalışmak var - > b -> c '. Bu biraz içine girmeye değer olabilir! – Ashe
@Len: İşlevlere uygulandığında, "id" nin ($) " –
ile aynı olduğunu gördüğünüzde bu daha net olur! Bu çok doğrudur! Benim için "a-ha" anı, 'a -> (b -> c)' olarak a -> b -> c 'yi görmem gerektiğini ve sonra bunu' id 'ile eşleştirdiğimi fark ediyordu. s 'a' -> a '' ve 'a = a' = (b -> c) 'yi bulduğumu fark ettim - aritmedeki farklılıklara çok fazla bakıyordum ve geçemedim. – Ashe