Özellikle Haskell'de büyük fonksiyonel programlar tasarlamak / yapılandırmak için iyi bir yol nedir?
Ben bir sürü öğreticilerden geçtim (Kendimi benim favorim olan bir Şema Yazın, Gerçek Dünya Haskell ile bir saniye) - ama programların çoğu nispeten küçük ve tek amaçlı. Ayrıca, bunların bazılarının özellikle zarif olduğunu düşünmüyorum (örneğin, WYAS'taki geniş arama tabloları).
Şimdi daha hareketli programlar içeren daha büyük programlar yazmak istiyorum - çeşitli farklı kaynaklardan veri almak, temizlemek, çeşitli şekillerde işlemek, kullanıcı arayüzlerinde görüntülemek, ısrar etmek, ağlar üzerinden iletişim kurmak vb. okunabilir, bakımı yapılabilir ve değişen gereksinimlere uyarlanabilir olması için en iyi yapılardan biri hangisidir?
Büyük nesne yönelimli zorunlu programlar için bu soruları ele alan oldukça büyük bir literatür vardır. MVC, tasarım modelleri vb. Gibi fikirler, endişelerin ayrılması ve OO tarzında tekrar kullanılabilirlik gibi geniş hedeflerin gerçekleştirilmesi için iyi reçetelerdir. Buna ek olarak, daha yeni zorunlu diller, acemi görüşüme göre Haskell'in daha az uygun göründüğü bir 'büyüdükçe tasarım' yeniden düzenleme tarzına katkıda bulunuyor.
Haskell için eşdeğer bir literatür var mı? Egzotik kontrol yapılarının hayvanat bahçesi, bu amaçla en iyi şekilde kullanılan fonksiyonel programlamada (monadlar, oklar, uygulanabilir vb.) Nasıl kullanılır? En iyi hangi uygulamaları önerebilirsiniz?
Teşekkürler!
EDIT (bu Don Stewart'ın cevabının bir devamıdır):
@dons bahsetti: "Monadlar türlerdeki önemli mimari tasarımları yakalarlar."
Sanırım sorum şu: bir kişi saf mimari dilde temel mimari tasarımlar hakkında nasıl düşünmeli?
Birkaç veri akışı ve birkaç işlem adımı örneğini düşünün. Veri akışları için bir dizi veri yapısına modüler ayrıştırıcılar yazabilirim ve her bir işlem adımını saf bir işlev olarak uygulayabilirim. Bir veri parçası için gereken işlem adımları, değerine ve diğerlerinin değerine bağlı olacaktır. Bazı adımları GUI güncellemeleri veya veritabanı sorguları gibi yan etkiler izlemelidir.
Verileri ve ayrıştırma adımlarını iyi bir şekilde bağlamanın 'Doğru' yolu nedir? Çeşitli veri tipleri için doğru olanı yapan büyük bir fonksiyon yazılabilir. Veya şimdiye kadar işlenmiş olan şeyleri takip etmek ve her işlem adımının monad durumundan sonra ihtiyaç duyduğu her şeyi almasını sağlamak için bir monad kullanabilirsiniz. Ya da biri büyük ölçüde ayrı programlar yazıp mesaj gönderebilirdi (bu seçeneği pek sevmiyorum).
Bağladığı slaytlarda İhtiyacımız Olan Şeyler madde işareti bulunur: "Tasarımın türlere / işlevlere / sınıflara / monad'lara eşlenmesi için deyimler". Deyimler nelerdir? :)