서로 다른 ReaderT 환경을 결합하는 것이 유용 할 것으로 보인다.ReaderT 모나드를 결합 하시겠습니까?
예를 들어, 일반적인 로깅 기능은 다음과 같이 보일 수 있습니다
logit :: Text -> ReaderT Bool IO()
logit str = do debugflag <- ask
liftIO $ if debugflag then putStrLn ("debug: " ++ str) else return()
이 좋은 재사용 가능한 구성 요소처럼 보인다. 그렇다면이 정의를 다른 ReaderT 환경과 통합하여 둘 다 사용할 수있는 방법은 무엇입니까?
예를 들어, 나는이 ReaderT 인스턴스와 결합한다고 가정 : 나는 같은 기능에 foo
및 logit
를 모두 사용할 수 있습니다
foo :: ReaderT Text IO()
foo = ...
있도록.
[이 게시물을 확인하십시오 (http://stackoverflow.com/questions/13007123/modular-program-design-combining-monad-transformers-in-monad-agnostic-function) –