2014-08-28 5 views
2

Yesod Handler 스택에 다른 모나드 변환기를 추가하려면 어떻게합니까?Yesod 처리기 스택에 모나드 변환기 추가

특히 Control.Monad.CryptoRandom에서 CRandT을 추가하여 세션 ids 및 암호 키와 같은 항목의 보안 난수를 생성 할 수 있습니다.

이것을 스택에 추가 할 수 있다면 웹 서버 호출간에 공유 될 것인가 아니면 각 연결마다 새로운 것이 생성 될까요? 내가 신경 쓰는 이유는 후자가 발전기를 초기화하는 데 사용 된 엔트로피를 사용하는 반면, 전자는 일단 초기화되면 동일한 발전기를 계속 사용한다는 것입니다.

어쩌면 나는 기초에서 벗어나 모나드 변압기 스택을 완전히 이해하지 못합니다.

+2

당신은 당신의 모나드로'CRandT g Handler'를 할 수 있다고 생각합니다.'Handler' 타입을위한 run 함수를 적용하기 전에'runCRandT' 또는'evalCRandT'를 사용해야 만합니다. – bheklilr

답변

2

@ bheklilr의 아이디어는 확실히 당신이 취할 수있는 접근 방법입니다. 일반적으로 말하자면 프레임 워크는이를 푸는 방법을 모르기 때문에 Yesod에 HandlerT 밑에 변압기를 삽입 할 수 없습니다. 당신이 당신의 기초 데이터 타입의 IORef 같은에서 난수 발생기를 유지할 수 후 특정 HandlerT App IO 모나드에 대한 MonadCRandom 인스턴스를 정의

이 다른 접근 방식을 것으로 보인다 않습니다. MonadCRandom에 대한 경험이 없으므로 직접 수행 할 방법을 시연 할 수는 없지만 너무 어려워서는 안됩니다. CRandT에 대한 MonadCRandom 인스턴스 주위의 구현을 기반으로 할 수 있습니다.

+0

마이클 - 재밌 네요. 방금 웹 사이트에서 https://github.com/yesodweb/yesod/wiki/Keeping-(in-memory)-state-with-yesod라는 위키 페이지를 발견했습니다. 지금 조사 중입니다. 감사. – Ralph

+2

예심 책에 대한 자세한 설명과 데모를 추가 한 점에 유의하십시오. http://www.yesodweb.com/book/yesods-monads#yesods-monads_adding_a_new_monad_transformer –

+0

매우 좋습니다! 그리고 우연히도 제가 물었던 질문에 우연히 대답합니다 :-). BTW, 언제 O'Reilly가 새로운 버전의 책을 인쇄하고 있습니까? 나는 최신 사본을 사고 싶다. – Ralph