reactive-banana을 사용하는 프로그램에서 작업하고 있으며 기본 FRP 구성 요소로 내 유형을 구조화하는 방법을 알고 싶습니다.적용 위치 FRP의 동작 (및 다른 유형)
예를 들어, 내 실제 프로그램의 단순화 된 예는 다음과 같습니다. 내 시스템은 주로 위젯으로 구성되어 있습니다 - 내 프로그램에는 시간 경과에 따라 텍스트가 다릅니다.
나는
newtype Widget = Widget { widgetText :: Behavior String }
을 가질 수 있지만, 나는 또한
newtype Widget = Widget { widgetText :: String }
하고 난이 시간에 따라 변화하는 행동에 대해 이야기 할 때 Behavior Widget
를 사용할 수 있습니다. 이것은 일을 "더 간단하게"하는 것으로 보이며, 위젯을 언팩하고 재 패키징하지 않고보다 직접적으로 Behavior
작업을 사용할 수 있음을 의미합니다.
반면 위젯은 실제로 위젯을 정의하는 코드에서 중복을 피하는 것 같습니다. 거의 모든 위젯이 시간에 따라 다르기 때문에 Behavior
으로는 소수를 정의하는 경우가 있습니다. 보다 일관된 방식으로 다른 것들과 결합 할 수있게 해줍니다.
또 다른 예로, 두 표현을 사용하면 Monoid
인스턴스를 가질 수 있습니다. (내 프로그램에 하나 갖고 싶습니다.) 그러나 후자에 대한 구현은 더 자연 스럽습니다 (newoid에 monoid를 나열하십시오).
는 (내 실제 프로그램은 오히려 Behavior
보다는 Discrete
를 사용하지만, 그게 관련이 있다고 생각하지 않습니다.)
을 마찬가지로, 나는 2D 점을 표현하기 위해 Behavior (Coord,Coord)
또는 (Behavior Coord, Behavior Coord)
를 사용해야합니까? 이 경우 전자는 명백한 선택처럼 보입니다. 그러나 게임에서 엔티티와 같은 것을 나타내는 5 개 요소의 레코드 일 때 그 선택은 명확하지 않은 것처럼 보입니다. 본질적으로
, 이러한 모든 문제가 아래로 감소 :
어떤 계층에서 나는 Behavior
유형을 적용해야, FRP를 사용하고 계십니까?는
(같은 질문은 비록 낮은 수준으로, 너무 Event
에 적용됩니다.)
'위젯'의 경우, 단 하나의 필드 만 갖는 것은 단순화가 아니었다. 내 실제 상황이므로 튜플이 필요 없다. 도움을 주셔서 감사합니다. 앞으로 매우 도움이 될 것입니다! 지금은 'Behavior'를 newtype에 넣을 것입니다. 나는 두 가지 대답을 모두 받아 들일 수 있었으면 좋겠다 :) – ehird