특히 Haskell에서 대규모 기능 프로그램을 설계 / 구성하는 좋은 방법은 무엇입니까?
나는 많은 튜토리얼을 겪어 보았습니다 (Real World Haskell과 함께 두 번째로 내가 가장 좋아하는 구성표 작성)-대부분의 프로그램은 상대적으로 작고 단일 목적입니다. 또한, 나는 그중 일부가 특히 우아하다고 생각하지 않습니다 (예 : WYAS의 광대 한 조회 테이블).
이제 다양한 소스에서 데이터를 수집하고, 정리하고, 다양한 방식으로 처리하고, 사용자 인터페이스에 표시하고, 유지하고, 네트워크를 통해 통신하는 등 다양한 부분으로 더 큰 프로그램을 작성하려고합니다. 변화하는 요구 사항에 대해 읽을 수 있고, 유지 보수 가능하며, 적응할 수있는 코드와 같은 최고의 구조?
큰 객체 지향 명령 프로그램에 대한 이러한 질문을 다루는 상당히 큰 문헌이 있습니다. MVC, 디자인 패턴 등과 같은 아이디어는 관심사 분리 및 OO 스타일의 재사용 성과 같은 광범위한 목표를 실현하기위한 적절한 처방입니다. 또한 새로운 명령형 언어는 '초대 의견으로는 하스켈이 적합하지 않은 것처럼 보이는 리팩토링 스타일'에 적합합니다.
하스켈에 해당하는 문헌이 있습니까? 기능 프로그래밍 (모 노드, 화살표, 응용 프로그램 등)에서 사용 가능한 이국적인 제어 구조의 동물원은 어떻게이 목적에 가장 적합합니까? 어떤 모범 사례를 추천 할 수 있습니까?
감사!
편집 (이것은 Don Stewart의 답변에 대한 후속 조치입니다) :
@dons 언급 : "모나드는 주요 건축 설계를 유형으로 포착합니다."
제 질문은 순수한 기능 언어로 주요 건축 디자인에 대해 어떻게 생각해야 하는가입니다.
여러 데이터 스트림과 여러 처리 단계의 예를 고려하십시오. 데이터 스트림에 대한 모듈 식 파서를 일련의 데이터 구조에 쓸 수 있으며 각 처리 단계를 순수한 기능으로 구현할 수 있습니다. 하나의 데이터에 필요한 처리 단계는 그 값과 다른 데이터에 따라 다릅니다. 일부 단계에는 GUI 업데이트 또는 데이터베이스 쿼리와 같은 부작용이 따라 와야합니다.
데이터와 구문 분석 단계를 좋은 방법으로 묶는 '올바른'방법은 무엇입니까? 다양한 데이터 유형에 적합한 작업을 수행하는 큰 함수를 작성할 수 있습니다. 또는 모나드를 사용하여 지금까지 처리 된 내용을 추적하고 각 처리 단계가 모나드 상태에서 다음에 필요한 것을 얻도록 할 수 있습니다. 또는 크게 별도의 프로그램을 작성하고 메시지를 보낼 수 있습니다 (이 옵션은별로 좋지 않습니다).
그가 연결 한 슬라이드에는 우리가 필요로하는 것들이 있습니다 : "디자인을 타입 / 함수 / 클래스 / 모나드에 매핑하기위한 관용구" 관용구는 무엇입니까? :)