내가 해결하고 싶은 작업에서 시작하겠습니다. 아마도 잘못된 길로 가고 있습니다. 저는 장난감 프로젝트를위한 Snap 프레임 워크를 사용합니다. 그리고 주요한 점은 Snap
모나드 아래의 함수라는 것입니다. 나는 그것 위에 내 상태를 추가해야합니다. 이 모듈, 말, Base
에 정의구현 >> = newtype에서
type SnapApp a = StateT AppState Snap a
: 나는 모나드 변압기를 사용합니다. 내가 다른 모듈에 필요하기 때문에, 나는 그것을 내보낼 수 있습니다
module Base
(..
, SnapApp
) where
이 좋은,하지만 몇 가지 복잡한 처리를 가지고 있기 때문에 나는 일부 속성을 설정, 해당 모듈이 SnapApp
상태 모나드 있음을 수출하지 않습니다 싶어 주. 예 : 세션. 파일이 변경되었을 때 파일을 써야하기 때문에, 단지 get
과 put
수정 된 세션이 틀리면 특수 함수를 호출해야합니다.
newtype SnapApp a = SnapApp (StateT AppState Snap a)
내가 그것을 세션 등 그러나 문제를 수정하기위한 기능 내 클래스의 인스턴스를 만들어 발생 : 그래서, newtype
아니라 데이터 내보내기 construstor를 사용하는 것을 숨기기 나는 새로운 SnapApp
다른과 Monad
클래스의 인스턴스를 잃었다 . 그리고 >>=
구현에 붙어 :
instance Monad SnapApp where
return = SnapApp . return
mx >>= fm = -- HOW?
감사합니다!
우수한 설명 주셔서 감사합니다! – demi