Monad transformatör - Monad transformer

İçinde fonksiyonel programlama, bir monad transformatör bir tür kurucusudur. monad argüman olarak ve sonuç olarak bir monad döndürür.

Monad transformatörleri, monadlar tarafından kapsüllenen özellikleri oluşturmak için kullanılabilir - örneğin durum, istisna işleme ve G / Ç - modüler bir şekilde. Tipik olarak, bir monad transformatör, mevcut bir monadın genelleştirilmesiyle oluşturulur; elde edilen monad transformatörün kimlik monadına uygulanması, orijinal monad'a eşdeğer olan bir monad verir (gerekli herhangi bir kutulama ve kutudan çıkarma göz ardı edilerek).

Tanım

Bir monad transformatör şunlardan oluşur:

  1. Bir tür oluşturucu t nın-nin tür (* -> *) -> * -> *
  2. Monad işlemleri dönüş ve bağlamak (veya eşdeğer bir formülasyon) herkes için t m nerede m bir monad, tatmin edici monad yasaları
  3. Ek bir operasyon, lift :: m a -> t m a, aşağıdaki yasaları karşılayan:[1] (gösterim "bağla" aşağıda infix uygulamasını gösterir):
    1. asansör. return = return
    2. kaldırma (m `bağlama` k) = (kaldırma m)` bağlama` (kaldırma. k)

Örnekler

Monad trafo seçeneği

Herhangi bir monad verildiğinde monad trafo seçeneği (nerede gösterir seçenek türü ) şu şekilde tanımlanır:

İstisna monad transformatör

Herhangi bir monad verildiğinde istisna monad trafosu (nerede E istisnaların türüdür) şu şekilde tanımlanır:

Okuyucu monad transformatörü

Herhangi bir monad verildiğinde okuyucu monad transformatörü (nerede E ortam türüdür) şu şekilde tanımlanır:

Devlet monad trafosu

Herhangi bir monad verildiğinde devlet monad trafosu (nerede S durum türüdür) şu şekilde tanımlanır:

Yazar monad trafosu

Herhangi bir monad verildiğinde yazar monad trafosu (nerede W ile donatılmış monoid operasyon kimlik öğesi ile ) şu şekilde tanımlanır:

Devam monad trafosu

Herhangi bir monad verildiğinde , devam monad transformatörü rastgele bir tip eşler R türünün işlevlerine , nerede R devamın sonuç türüdür. Şu şekilde tanımlanır:

Monad dönüşümlerinin genellikle değişmeli: örneğin, durum transformatörünü monad seçeneğine uygulamak bir tür verir (başarısız olabilen ve nihai durumu olmayan bir hesaplama), ters dönüşümün türü vardır (bir son durum ve isteğe bağlı bir dönüş değeri veren bir hesaplama).

Ayrıca bakınız

Referanslar

  1. ^ Liang, Sheng; Hudak, Paul; Jones, Mark (1995). "Monad transformatörler ve modüler tercümanlar" (PDF). 22. ACM SIGPLAN-SIGACT programlama dilleri ilkeleri sempozyum bildirileri. New York, NY: ACM. s. 333–343. doi:10.1145/199448.199528.

Dış bağlantılar