GLFW 및 OpenGL 위에 GUI를 작성하는 라이브러리를 사냥하고 있습니다. 필자는 너무 긴급하다고 느끼는 일반적인 UI 라이브러리 바인딩에 만족하지 않고 UI의 모양과 느낌을 엄격하게 제어하고 싶기 때문에이 작업을 수행하고 있습니다. UI 정의에 대한 선언적 접근 방식을 원합니다. 나는 그것이 나의 필요를 충족시키는 지 알아보기 위해 reactive-banana (그리고 일시적으로 반응하는 바나나 -wx)를 실험하고있다. 재귀 위젯을 정의하는 데 문제가 있습니다. 가장 간단한 테스트 케이스는 다음과 같습니다.반응식 바나나가있는 상호 재귀 GUI 위젯 처리
- 카운터를 표시하는 텍스트 위젯입니다.
- 카운터를 증가시키는 버튼 위젯. 카운터는 달리 액티브 0 일 때 (이 회색으로 표시되고, 모든 입력에 응답하지 않도록) 비활성 0.
첫 번째와 세 번째 위젯 카운터를 리셋
union
개의 이벤트 중 stepper
입니다. 그러나 재설정 버튼은 카운터의 fmap
이며, 이벤트 스트림은 재설정 버튼을 사용합니다! 무슨 일을해야할까요? 이 질문을 넘어서는 프레임 워크에 의존하는 대신 장치 입력 및 포커스를 코드 내에서 처리하기 때문에 확장 가능한 방식으로 올바르게 이벤트를 전달하는 것이 어려워집니다. 이상적으로 위젯의 계층 적 구조를 캡슐화하는 data
을 정의하고 요소 사이에 이벤트 콜백을 설치 한 다음 장치 입력 처리 및 그래픽 출력을 정의하기 위해 해당 데이터 구조를 통과하는 함수를 작성합니다. 이벤트 스트림을 병합하는 방법을 잘 모르겠습니다. 이벤트 스트림을 병합하면 쉽게 분리 할 수 있습니다.
이벤트 모나드에 있다면 어떨까요? MonadFix에 값 재귀가 없기 때문에이 재귀를 동적 이벤트 전환이있을 때 표현할 수 없었기 때문에 걱정이되었습니다. 필자는 모든 대중적인 예를 여전히 편안하게 생각하지는 않는다. – danharaj
내 두 번째 질문은'filterE' 외. 확장성에있어 잘못된 방향으로 작업한다고 생각합니다. 그들은 사건에서 당겨서, 그것은 성가신 것처럼 보입니다. 예를 들어 키보드 집중을위한 커서가있는 GUI 위젯 트리 구조가 있다고 가정 해보십시오. 우리는'eDeviceInput' 이벤트를 그 커서에 기반한 이벤트로 바꾸기를 원합니다. 'filterE'를 사용하면 모든 수신자 이벤트 스트림이 위젯 트리에서 고유 한 필터를 수행하고 트리에있는 곳을 알아야하므로 레이아웃 변환과 동적 이벤트 전환이 번거로워집니다. – danharaj
'이벤트'유형이 모나드가 아닙니다. 아마도 '순간'모나드를 의미할까요? MonadFix의 예입니다. –