Control.Applicative
에 대한 문서를 살펴보면 특정 모나드 (예 : IO
, Maybe
, 특히 ST
)에 대한 인스턴스 선언이 있음을 알았지 만 State
및 RWS
과 같은 MTL 모나드의 인스턴스는 없습니다. 대신 일반적인 용도의 WrappedMonad
유형이 정의되어있는 것처럼 보입니다.이 유형은 다른 모든 경우를 처리하는 것으로 추측됩니다.주 및 다른 MTL 모나드의 적용 인스턴스?
그럼 내 질문은 다음과 같습니다.
왜 MTL 모나드에
Applicative
인스턴스가 없습니까? 내가 지금까지 스스로 찾아 낼 수 있었던 가장 좋은 대답은 three year old post으로 누군가이 인스턴스를 구현하고 간략하게 무시되었다.WrappedMonad
와 어떤 관계가 있습니까? post on Reddit가 짧게 설명되어 있지만 사용법에 대해 혼란 스럽다고 생각합니다.
궁극적으로 응용 스타일 (recommended to me)에서 State
을 사용할 수 있기를 바랍니다.하지만 WrappedMonad
데이터 생성자로 코드를 깔아야한다면 성공하지 못했습니다. . 또한 WrappedMonad
를 완전히 무시하고 Applicative
인스턴스를 IO
, ST
등의 작업과 동일한 방식으로 정의 할 수 있습니다. return
및 ap
의 측면에서 ...하지만 이는 구피처럼 보입니다.
Functor => 적용 => Monad 및 (Alternative, Monad) => MonadPlus – alternative