>>= 및 return 함수만 주어지면 c 형과 결합하는 것과 같은 함수를 쓰는 것은 불가능합니다. 그러나 이러한 함수는 MonadPlus라는 다른 클래스에 존재하므로 일반적으로 유용합니다. 결합 함수를 갖는 것 외에도 MonadPlus의 인스턴스에는 “plus” (즉, 결합) 작업 에서 ID인 “0” 요소가 있습니다. 정의는 : 큰 그림은이 두 가지 함수 = 및 eta가 추가를 단순화하도록 설계되었지만 어떤 식으로든 추가의 세부 사항에 의존하지 않는다는 것입니다. 이러한 함수는 실제로 기본 값의 형식에 관계없이 Maybe 형식의 모든 값과 함수에 적용할 수 있습니다. 예를 들어, 정의되지 않은 값을 자동화하기 위해 동일한 함수를 사용하는 (Kleene`s) trinary 논리의 간결한 NOT 연산자는 다음과 같습니다. 그러나 위의 예제와 같이 한 번에 몇 가지 작업 이상을 수행하려고 할 것입니다. 그런 식으로 중첩 함수는 이득이되기 시작합니다. 우리가 원하는 것은 기본적으로 위와 같은 작업을 수행하지만 다음과 같이 작성되는 코드입니다: Monads는 래핑된 값에 래핑된 값을 반환하는 함수를 적용합니다. 모나드에는 이 작업을 수행하는 함수가 있습니다.>=(“바인드”로 발음) 일부 데이터를 가져와 API에 적중하고 해당 값을 반환하는 함수가 있고 해당 데이터를 가져와 다른 API에 적중하고 해당 데이터에 대한 계산 결과를 반환하는 함수가 있을 때마다 => Monad(b) 형식의 함수를 작성해야 합니다. API 호출은 비동기이므로 약속이나 관찰 가능한 방식으로 반환 값을 래핑해야 합니다. 즉, 이러한 함수의 서명은 각각 -> Monad(b) 및 b -> Monad(c)입니다. MonadPlus에 액세스하려면 모나드 모듈(또는 계층 적 라이브러리에서 Control.Monad)을 가져와야 합니다.

내가 모나드에 대해 생각할 수있는 가장 큰 이유는 – 절차 / OOP 코드를 살펴 가서, 당신은 프로그램이 시작하거나 끝나는 곳을 모르는 것을 알 수 있습니다, 당신이 보는 모든 점프와 수학, 마법, 미사일을 많이많이입니다. 당신은 그것을 유지할 수 없습니다., 그리고 당신이 할 수 있는 경우에, 당신은 그것의 어떤 부분을 이해 하기 전에 전체 프로그램 주위에 당신의 마음을 포장 꽤 많은 시간을 보낼 것 이다, 이 컨텍스트에서 모듈성은 코드의 상호 의존적인 “섹션”을 기반으로 하기 때문에 , 코드가 효율성/상호 관계를 약속하기 위해 가능한 한 관련하도록 최적화된 경우 Monads는 매우 구체적이며 정의에 따라 잘 정의되며, 프로그램 흐름이 분석이 가능한 부품을 분석하고 분석하기 어려운 부품을 분리할 수 있도록 합니다. 모나드는 “완전한 이해를 예측할 수 있는 이해할 수 있는 단위”로 보입니다 – “어쩌면”수도원을 이해한다면, 사소한 것처럼 보이지만 대부분의 비 수도원 코드에서는 간단한 기능인 “어쩌면”을 제외하고는 아무 것도 할 수 없습니다. helloworld”는 미사일을 발사하거나, 아무 것도 하지 않거나, 우주를 파괴하거나, 심지어 시간을 왜곡할 수 있습니다 – 우리는 그것이 무엇인지 전혀 알지 못합니다.