2016-06-01 9 views
2

나는 하스켈과 FRP에 대한 내 머리를 감싸고있다. 특히, 나는 반응성 - 바나나 패키지를 사용하고 FRP를 얻기 시작하는 몇 가지 예제를 통해 연구했다.하스켈 리 액티브 바나나 FRP 및 이벤트 루프

그러나 입력 이벤트가 발생했을 때 이벤트 네트워크가 어떻게 인식되는지는 여전히 이해할 수 없습니다. 사용자 입력을 지속적으로 확인하는 NodeJS와 달리 FRP는 사용자 입력 또는 외부 신호를 "대기"또는 "확인"하기 위해 다른 프레임 워크를 사용합니다.

필자의 독서에서, FRP는 시간을 명시 적으로 만듭니다. 이벤트 또는 행동과 시간을 연결함으로써 네트워크는 외부 자극이 언제 발사되었는지 언제나 알 수 있습니다.

나는 Conal, Hudak, 등의 많은 논문을 읽었습니다. 설명이 너무 기술적입니다. 덜 기술적 인 설명을하십시오.

도움 주셔서 감사합니다.

+0

나는 * 실제 단어 입출력 물건을 사용하여 대부분 * 치트 *를 생각합니다. * - 예를 들어 [this] (https://hackage.haskell.org/package/reactive-banana-sdl-0.2.0/) docs/src/Reactive-Banana-SDL.html # runSDLPump) SDL 타이머를 사용하여 시간을 펌프합니다. 비슷한 것들 (일상적인 명령형/비동기식/이벤트 기반 'IO' 물건) ([here] (https://hackage.haskell.org/package/reactive-banana-1.1.0.1/docs/Reactive-Banaana-Frameworks.html)) – Carsten

+0

FRP 라이브러리를 연결하는 몇 가지 예제를 작성했습니다. 실제 세계 UI 물건. [reactive-banana를 GLUT에 연결하는 예] (http://stackoverflow.com/questions/15129677/simpler-alternative-libs-to-reactive-haskell/26112094#26112094) _ _ 세계 IO 항목에서 발생한 이벤트를 보여줍니다. [Reactive-Banana to Gloss에 연결하는 예제] (http://stackoverflow.com/a/20677522/414413)에서는 명시적인 이벤트 루프에서 스테핑 이벤트를 보여 주지만 IO를 통해 우회하여 Reactive.Banana의 기존 지원을 사용합니다 .Frameworks'. – Cirdec

답변

3

처럼, 마음에 기본 Event의 모음을 제공 흥미로운 Event의 기본적인 것들에서 Behavior의 구축과 관련되는 FRP 사이의 구별, 그리고 특정 플랫폼 "글루 코드"를 유지하는 데 유용 현재 마우스 위치 또는 키보드 누름

Reactive-Banana 라이브러리에서 Reactive.Banana.Combinators은 첫 번째 부분과 관련이있는 반면, Reactive.Banana.Frameworks은 두 번째 부분과 관련된 모듈 구조에 반영됩니다.

이제 두 번째 파트 (기본 Events)의 작동 방식을 이해하면 첫 번째 파트 (FRP)의 작동 방식을 이해하는 데 중요하지 않습니다. 사실, 다른 라이브러리는 매우 다른 구현 선택을 할 수 있습니다.

Reactive-Banana 라이브러리에서 이벤트 네트워크는 본질적으로 자체 이벤트를 외부 이벤트 소스 (라이브러리의 AddHandler)에 등록하는 거대한 콜백 기능입니다. 이러한 외부 소스 중 하나가 콜백 함수를 호출 할 때마다 후자는 EventBehavior의 그래프를 종속성 순서로 트래버스하고 내부 상태에 필요한 업데이트를 수행하며 마지막으로 reactimate으로 미리 등록 된 작업을 실행합니다.

FRP의 마법은 "이벤트 네트워크 = 거대한 콜백 기능"을 아는 것이 유용 할지라도 라이브러리 사용자는 이러한 구현 세부 정보를 전혀 볼 수 없다는 것입니다.

+0

하인리히 감사합니다. 나는 너의 일에서 많은 것을 배웠다. 매우 감사. 후속 질문이 있습니다. 이벤트와 행동 사이의 흐름과 상호 연결을 이벤트 네트워크라고합니다. 그래프와 같은 것입니까? – phage

+0

@phage 예, 기본적으로 같은 의미입니다.나는 약간의 구별을한다 : 나는 일반적으로 이벤트, 행동 및 연결을 참조하기 위해 "그래프"를 사용하고 IO 작업 및 등록 된 이벤트 핸들러와 함께이 작업을 가리키는 "네트워크"를 사용한다. 다시 말해, 나는 전자를 "순수"로, 후자를 "불결한"것으로 생각한다. 하지만 실제로는 작은 표기법을 사용하고 있습니다.이 표기법을 쓸 때 좀 더 정밀도를 더하기를 원합니다. –