Jane Street'te Hardcaml simülasyonları için kullanılan Hardcaml_step_testbench kütüphanesi, OCaml 5'in yeni bir özelliği olan cebirsel efektleri kullanmak üzere monadlardan taşındı. Bu geçiş, cebirsel efektlerin ne olduğunu, neden monadlar yerine tercih edilmesi gerektiğini ve Handled_effect kütüphanesi ile nasıl kullanılabileceğini ele alıyor. Yazar, monadlarla yapılabilecek çoğu şeyin cebirsel efektlerle çok daha zarif bir şekilde yapılabileceğine inanıyor. OCaml 5'e genel amaçlı eşzamanlı program yürütme için eklenen cebirsel efektlerin Hardcaml simülasyonları için yeniden kullanılabiliyor olması, bu dil özelliğinin ne kadar iyi düşünülmüş ve genel olduğunu gösteriyor. Yazar, tip teorisi uzmanı olmamasına rağmen cebirsel efektleri kullanabilmesinin, tasarımının güzel bir yönü olduğunu belirtiyor.
Makale, monadların neden sorunlu olduğunu sorgulayarak başlıyor. OCaml programcıları tarafından uzun süredir hesaplamaları modellemek için kullanılan monadlar, özellikle Jane Street'in Async kütüphanesi gibi eşzamanlı programlama araçlarında yaygın olarak kullanılıyor. Ancak monadların temel sorunlarından biri, kodun 'enfekte' olması ve okunabilirliği zorlaştırmasıdır. Örneğin, Deferred.t monadını kullanan bir sunucu ile etkileşimde, let%bind gibi sentaktik şekerler ve return () gibi gürültülü ifadeler kodu doldurur. Ayrıca, normal çekirdek kütüphane fonksiyonları yerine Deferred.List.iter veya Deferred.for_ gibi monad'a özel versiyonların kullanılması gerekir. Bir monad kullanmaya başladığınızda, ona bağımlı hale gelirsiniz ve onunla etkileşim kuran tüm kodun da monadı dikkate alması gerekir, bu da geliştirme sürecini karmaşıklaştırır.
OCaml 5'in cebirsel efektleri, monadların yol açtığı kod karmaşıklığını azaltarak daha okunabilir ve sürdürülebilir programlama yaklaşımlarına olanak tanıyor.