2014-09-04 3 views
3

최근에 저는 Fay에 자바 스크립트 코드를 포팅하여 형식 정확성을 보장 할 수있게되었고, 그래서 비동기를 깔끔하게 처리 할 수있었습니다. 필자는 병렬 아약스 호출을 동기화하는 용도로만 사용되는 몇 가지 자바 스크립트 개체를 작성했습니다. 나는 하스켈에게 아주 새로운 사람이다.Haskell Fay 시퀀스 비동기 호출

Fay에서는 몇 가지 아약스 호출을 실행하고, 예를 들어 Control.Monad.Parallel.sequence을 사용하여 동기화하도록하고 싶었습니다. 그러나 fay-jquery AJAX functions은 성공/실패 콜백에 대한 모나드를 반환하지 않으며 this example in the fay snaplet도 마찬가지이므로 지침이 절실히 필요합니다. 그들은 모두 Fay() 모나드를 반환합니다. 단지 합법적 인 javascript 문으로 나눠지는 게으른 haskell을 호출하는 것입니다. 반면에 나는 (Fay(), IO (Successful Result FailureResult) 중 하나)와 같은 것을 기대합니다. AJAX 요청을 해제하면 두 가지 다른 동작이 발생합니다.

  1. 은 내가 무엇을 찾고 계속 모나드가 :

    나는 이것에 대해 많은 질문이 있습니까?

  2. Fay와 함께 작동하는 모듈이 있습니까? 비동기 자바 스크립트에이 모나드를 사용합니까?
  3. fay-jquery's AJAX functions의 부작용은 반환 된 Fay() 뒤에 바인딩되거나 시퀀스 된 후 발생하므로 함수가 불순물이됩니까?
  4. 나는 a를 통지한다 continuation monad in the Fay repo - 왜 그것은 Fay 자체에서 사용되지 않습니까? 내가 찾을 수있는 유일한 것은 this gist which wraps async node.js fs calls입니다.

답변을 보내 주시면 감사하겠습니다. 그들은이 물건에 대한 나의 흔들리는 이해를 크게 도울 것이다.

답변

2
  1. 예. Cont 예제는 본질적으로 원하는대로 처리하고 오류 처리를하지 않습니다.
  2. ^
  3. 귀하의 "불순한"정의에 따라 다릅니다. 나는 모든 효과가 수행되기 전에 반환되는 함수가 여전히 순수하다고 말할 수 있습니다. 이것은 하스켈의 모든 게으른 계산의 경우입니다. 예를 들어 하스켈을 참조하십시오. forkIO :: IO() -> IO ThreadId
  4. "Fay 자체에서"무엇을 의미하는지 모르겠습니다. Prelude가이 라이브러리를 사용해야한다고 생각하지는 않지만 다른 라이브러리에서는 Cont를 사용할 수 있습니다.이 예제를 통해 패키지를 자유롭게 만들려면이 라이브러리를 사용할 수 있습니다.
+0

답변 해 주셔서 감사합니다. 나는 스스로를 조사해 왔으며 Cont 예제를 확장하는 것이 내가 원하는 것임을 확인했다. 이 예제는 Control.Monad.Cont가 Fay에서 지원하지 않는 유형 파일에 의존하기 때문에 필요합니다. – user1158559

+0

확실히, 부작용이 순수한 함수의 경우 부작용을 반환해야합니다. 예를 들어,'forkIO'는 즉시 생성 될 스레드의 부작용을 나타내는'IO ThreadID' 유형의 어떤 것으로 즉시 리턴 할 것입니다. fay 모나드에 함수를 바인딩하는 것은 그 함수가 Fay 모나드를 생성 한 함수 바로 다음에 실행된다는 것을 의미하기 때문에 'Fay' 모나드는 AJAX 호출의 부작용을 나타내지 않거나 실패하므로 AJAX 호출 불순물이어야한다. – user1158559

+0

4는 좋은 지적입니다 - Fay 자체는 Haskell에서 JS 컴파일러로 계속 모나드를 사용하지 않습니다. 그러나 Javascript의 콜백과 하스켈의 비동기 처리를위한 모나드 사용 간의 갭을 줄이는데 매우 유용 할 수 있는지 궁금해졌습니다. 개인적으로 Fay를 조사한 나의 동기 중 일부는 모나드를 사용하여 비동기 호출을보다 깔끔하게 동기화 할 수 있는지 확인하는 것이 었습니다. – user1158559