SORU
6 EYLÜL 2010, PAZARTESİ


Monadlar vs Ok

Geniş fonksiyonel programlama kullanılan monads arrows kavramlarını biliyorum. Ben de benzer sorunları her türlü çözmek için kullanılan olduğunu anlamak.

Ancak hala, herhangi bir durumda kullanmak için hangi seçmek için nasıl hakkında karıştı.

Ne zaman monadlar kullanmalıyım ve ne zaman okları kullanmalı mıyım?

CEVAP
8 EYLÜL 2010, ÇARŞAMBA


Lindley, Wadler & Yallop (LTU here de tartışıldığı iki mükemmel bildiri vardır.

Anlamak için en önemli şey olduğunudaha fazlamonadlar olan şeyler var daha okları olan şeyler. Tersine, monadlar oklar (second paper above tam olarak hangi biçimde belirtir) den kesinlikle daha güçlü.

Özellikle, monadlar oklar uygulamak tip fonksiyonu (~>) verilen bir ok yapıcısı olduğu (a ~> b, a) ~> b ile donatılmıştır. Lindley ve ark. bu titiz ayrım okları terimleri ve komutları (ya da eğer isterseniz, nesneleri ve morfizmaları) arasında muhafaza eder.

Uygulamalı funktorlar uygulamalar geniş bir yelpazede, özellikle en iyi akarsular üzerinde işlem olarak düşünülen şeyler var. Aslında dere üzerinde bir transformatör (nesneleri verilen uygulamalı bir functor inşa ettirdiği morfizmaları için yeni bir dil tanıtımı yani) kavramı genelleme doğan ok gibi düşün.

Benim deneyim, çünkü monadlar bulanıklık ayırımını nesneleri ve morfizmaları (Yani, eğer ben kullanarak kelimeleri doğru bir şekilde, sebep olan bir kapalı kartezyen kategori), sonra bir dönem bir monad genellikle çok daha mutlaka daha opak bir dönem içinde bir ok ya da uygulamalı functor (not her ne kadar hem izin enjekte keyfi fonksiyonları ile arr pure yöntemler sırasıyla).

Eğer bir şey olursadeğilbir monad özellikleri göz önüne alındığında kavramsal olarak bir form bile olsa), daha fazla kontrol ve Optimizasyonu için potansiyel olarak açıktır. Ayrıca muhtemelen daha kolay hale getirmek. Ayrıştırıcıları ve devre modelleme applicatives ok ve dolayısıyla kullanın.


Yukarıda genel ve açıklayıcı olması için çalıştı. Aşağıda, başparmak dik kafalı benim bazı kurallar.

Eğer devlet benzeyen bir modele ihtiyacınız varsa, bir monad ile başlar. Eğer genel kontrol akışı (istisnalar devamı yani) benzeyen bir modele ihtiyacınız varsa, bir monad ile başlar. Eğer bir gereklilik gücü ile çakışan ve monadlar ((join :: m (m a) -> m a) katılmak yani çok güçlü) genellik ortaya çıkarsa, o zaman kullandığınız şeyin gücü önemsiz şeylerden uzak düşünün.

Eğer akarsu ve bazı özellikleri (geçmiş ve gelecek özellikle sınırsız görünümleri) opak olmalıdır akışları ve özellikle akarsular üzerinde dönüşümleri modellemek için gerekiyorsa, o zaman uygulamalı bir functor ile başlar. Eğer dere üzerinde dönüşümlerin özellikleri hakkında güçlü muhakeme gerekiyorsa, o zaman bir ok uzanıyor düşün.

Ya da, kabaca söylersek çok, applicatives devreleri eylemleri için, okları devrelerin yapıları, monadlar genel amaçlı hesaplamalı etkileri vardır.

Tabii bu hikayenin daha fazlası var. Applicatives için, özellikle Conal Elliott's work on FRP bkz. Oklar için, diğer şeyler arasında HXT XML parser library, Yampa FRP project, ** 14, Hudak ve Liu'nun "Plugging a Space Leak with an Arrow" klasik kağıt, bakın. Monadlar için, her yere bakın. Ve tabii ki bir şey almak bir monad olması, uygulamalı gösterim daha net ve daha etkileyici olmayabilir anlamına gelmez unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dellbear816

    Dellbear816

    4 Mart 2008
  • Gavin Hoey

    Gavin Hoey

    21 Aralık 2007
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010