렌즈

2013-09-03 2 views
5

에 대한 국가 연결자 누락을 검색 하시나요 나는 현재 다음과 같습니다 코드를 한 줄에이 작업이 있지만 찾을 수 없습니다.렌즈

(????) :: MonadState s m => Lens' s a -> (a -> m a) -> m a 

질문 :

  • 같은 콤비가 존재 하는가 나는 그것이 같은 의견을 가지고한다고 생각하십니까? 그렇다면 무엇입니까?
  • 나는 그것을 검색하는 가장 좋은 방법은 무엇인지,이 같은 또 다른 질문으로 실행 (즉 보통 그냥 Hoogle이 점을 입력합니다하지만 렌즈 라이브러리 것을하고 행운이 없었습니다)
  • 인가를 이것은 실제로 Control.Monad에서 발견 된 원시적 인 결합 자입니까?

답변

0

당신이 찾고있는 함수의 유형 서명이 >>=의 그것과 의심 가까운, 그러나 다른 첫 번째 인수로 (이것은 kleisli 화살표의 또 다른 작업 인 경우 나는 약간 당황 할 것이다).

특히, use foo :: Monad m => m Foofoo <~ runFoo :: Foo -> m Foo 인 것처럼 보이므로 바인드를 직접 use foo >>= (\x -> foo <~ runFoo x)으로 사용할 수 있습니다. 아마도 더 쉽고/더 짧은 방법 일지 모르지만 나는 놀 수있는 전체 코드가 없습니다. 나는 단지 두 줄을 사용하는 것으로 계속해서 말하고 싶습니다. 그리고 그것이 일반적인 작업이면, 자신 만의 조합자를 정의하십시오.

+1

실제로 거기에 더 이상 아무것도 해본 적이 없습니까? 하스켈의'do' 표기법을 사용 했습니까? 이 기술은'do' 문에서 두 줄을 결합하는 데 사용할 수 있습니다. 'use'와'(<~)'를 병합하고 싶습니다. –