Haskell ve OCaml'ın monad yaklaşımının karşılaştırılması
(hackers.pub)Haskell'de monadlar: zarif bir soyutlama
- Monadlar yalnızca
Promisebenzeri bir kavram değil, güçlü bir soyutlama aracıdır Monadtypeclass'ı sayesinde çeşitli bağlamlarda (Maybe,[],IO,State) kod yeniden kullanılabilir- Jenerik fonksiyonlar (ör.
sequence,mapM) tüm monadlarda kullanılabilir donotasyonu ile okunabilirliği yüksek kod yazılabilir- Tek bir desenle farklı hesaplama bağlamları tutarlı biçimde ifade edilebilir
OCaml'ın farklı yaklaşımı: pragmatizm
- Typeclass yerine modül sistemi ve functor'lar kullanılır
- Sözdizimsel destek eksikliği (ör.
donotasyonu) nedeniyle monad kodu daha ayrıntılı olur - Doğrudan yan etkilerin kabul edilmesi, monadları zorunlu olmaktan çıkarır
option,resulttiplerinin doğrudan kullanımı ve modül düzeyinde soyutlama tercih edilir- Yerel olarak anlaşılması kolay kod yazılabilir
Dil tasarımı felsefesindeki fark
- Haskell: saf fonksiyonel yapısı nedeniyle etkileri yönetmek için monadlar zorunludur
- OCaml: yan etkilere izin verdiği için daha doğrudan kod yazılabilir
- Soyutlama, açıklık ve tip sisteminin rolüne dair felsefi farklılıklar vardır
- Haskell tutarlılık ve soyutlamayı, OCaml ise açıklık ve pragmatizmi öne çıkarır
Sonuç niteliğinde görüş
- Haskell'in tutarlı soyutlama yaklaşımı özellikle karmaşık sistemlerde çekicidir
- OCaml'ın doğrudan yaklaşımı, anında anlaşılmanın önemli olduğu durumlarda kullanışlıdır
- Typeclass'lar ve sözdizimsel destek, Haskell'de özellikle zarif kod yapılandırmasına olanak tanır
- Her iki yaklaşımın da kendine özgü güçlü yanları vardır ve uygun seçim bağlama göre yapılmalıdır
Henüz yorum yok.