Soru Bu F # sihir nedir (> =>)?


Aşağıdaki kod snippet'i geldi İşte ve bağlamdan, şablon eşleştirmesi yoluyla ne yaptığını anlıyorum, ancak bunu nasıl yapıyor ve operatör (ler) in bir döngü için bana sahip olduğunu. MSDN yardımcı olmadı. Bu bir operatör ise, bir ismi var mı? Benim üzerimde bazı eksik google fu varsa üzgünüz.

let (>=>) f1 f2 arg =
  match f1 arg with
  | Ok data -> f2 data
  | Error e -> Error e

GÜNCELLEŞTİRME: Gerçekten de, operatörün aşırı yüklendiği ve diğer SO sorusuna olan bağlantı için teşekkürler, sanırım sorumun asıl nedeni, aşırı yüklenmiş operatörün semantiği. Diğer bağlantılara bakıldığında (>> =) tipik bağlama operatörü gibi görünüyor.


17
2018-05-07 20:21


Menşei


Muhtemelen okumalısın bu Demiryolu Yönelimli Programlama ile ilgili makale, bir cevapta yapabileceğimden daha iyi açıklayacaktır. - DaveShaw
olası kopyası F # 'da kendi operatörünüzü tanımlayabilir misiniz? - Euphoric
haskell.org/hoogle/?hoogle=%3E%3D%3E - Mauricio Scheffer
@DaveShaw harika makale, teşekkür ederim - Ahmad Ragab


Cevaplar:


İşte Kleisli bileşimi monad operatörü. "Şekiller" işlevlerini oluşturmanıza izin verir 'a -> M<'b> ve 'b -> M<'c'> nerede M monadiktir: senin durumunda Result<'t> bağlantılı makaleden.

>=> gerçekten sadece bir fonksiyon bileşimidir, ama >> İlk fonksiyonun dönüş tipi ikinci olanın argümanı olmadığı için burada işe yaramaz - Result<'t> ve tam olarak ne, hangi unwrapped gerekir >=> uygulama yapar.


Açısından tanımlanabilir >>= ayrıca:

let (>=>) f1 f2 arg =
    f1 arg >>= f2

Haskell'in Control.Monad paketi bu tanımı kullanıyor gibi görünüyor. Tam tip imza da yararlı olabilir ( İşte):

-- | Left-to-right Kleisli composition of monads.
(>=>)       :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c)
f >=> g     = \x -> f x >>= g

Yine başka bir eğlenceli gerçek Kleisli kompozisyonu üç yapar monad yasaları sadece işlevleri kullanarak ifade etmek daha kolay (ve bence bu onları daha net hale getirir):

  • Sol kimlik: return >=> g ≡ g
  • Doğru kimlik: f >=> return ≡ f
  • Birleşim: (f >=> g) >=> h ≡ f >=> (g >=> h)

19
2018-05-07 22:00



Cevabınız için teşekkür ederim, bir dakikanızı alıp bunu sindirmeye çalışacağım. Sadece üçlü çubuğun eşitlik veya ödev değil, tanım olduğunu doğrulamak istedim? Ayrıca, bu sembolü SO'ya nasıl yazıyorsunuz? - Ahmad Ragab
Üçlü çubuk ≡ Bu durumda genişlemeli eşitliktir. İçin saf fonksiyonlar, aynı girişi sağ ve sol tarafa sağlarsanız, her ikisinden de aynı çıkışı elde edeceğiniz anlamına gelir. - Honza Brestan
Teşekkür ederim, bu son olarak, bağlama operasyonuyla nasıl bağlantılı olduğunu gördüğümde anlam ifade ediyor. - CodeMonkey