반응식 바나나에서 일련의 숫자를 생성하는 이벤트 스트림이 있는데 그 중 일부는 여러 번 연속으로 반복됩니다 (모든 중복, 순차적 복제). 비 순차적 복제 만 포함하도록 이벤트 스트림을 수정하려면 어떻게해야합니까?반응식 바나나에서 반복되는 이벤트를 제거하는 방법
변경 사항을 사용하여 이벤트가 새 번호 일 때만 동작이 "변경"되는 것으로 생각했지만 동작 대신 새 입력 이벤트가 수신 될 때마다 변경 이벤트가 트리거됩니다.
반응식 바나나에서 일련의 숫자를 생성하는 이벤트 스트림이 있는데 그 중 일부는 여러 번 연속으로 반복됩니다 (모든 중복, 순차적 복제). 비 순차적 복제 만 포함하도록 이벤트 스트림을 수정하려면 어떻게해야합니까?반응식 바나나에서 반복되는 이벤트를 제거하는 방법
변경 사항을 사용하여 이벤트가 새 번호 일 때만 동작이 "변경"되는 것으로 생각했지만 동작 대신 새 입력 이벤트가 수신 될 때마다 변경 이벤트가 트리거됩니다.
주, 그것은 은 이벤트와 행동을 일반 프로그래밍에 사용할 수 없습니다. 중복 이벤트 발생을 진압 할
함수는 test
실행
skipEqual :: Eq a => Event t a -> Event t a
skipEqual = filterJust . fst . mapAccum Nothing . fmap f
where
f y (Just x) = if x == y then (Nothing,Just x) else (Just y,Just y)
f y Nothing = (Just y, Just y)
test = interpretModel skipEqual $ map (:[]) [1 :: Int,1,2,3,3,2]
다음과 같이 mapAccum
filterJust
연결자 환산 원하는
*Main> test
[[1],[],[2],[3],[],[2]]
제공 할 수있다.
즉, Event
을 발생 목록으로 생각한 다음 사랑하는 "목록"연결자를 적용 할 수 있습니다.
글쎄, changes
은 아무 것도 Behavior
으로 바꾸지 않습니다. 을에서 Behavior
의 변경을 NetworkDescription
으로 변경하면 외부 프레임 워크에 붙일 수 있습니다. behaviour of changes
은 changes (stepper x e)
≡ return (calm e)
으로 설명되므로 stepper
및 changes
을 통해 이벤트를 라운드 트립하면 (모든 동시 발생을 무시하지만 첫 번째 이벤트 만 제외)이 효과가 없습니다.
값을 변경하지 않는 항목을 버리기 위해 결합자를 사용하는 것이 유용합니다. 다른 FRP 프레임 워크가 내장되어 있다고 생각합니다. 그러나 하인리히의 답변에서 볼 수 있듯이 쉽게 작성할 수 있습니다. changes
기능 은 GUI 툴킷과 thelike 바인딩에 사용할 수 것을
오, 왜 그렇게 생각하지 않았습니까?! 이 질문에 찬성하여 내 대답에서 추악한 구현을 제거했습니다. – ehird
변경 사항을 사용해서는 안되는 경우 행동에 의미있는 것을 어떻게 할 수 있습니까? – Orclev
@Orclev : 이벤트에 동작을 적용 할 수 있습니다. '<@>'과'<@'연산자가 사용됩니다. 또한 동작과 이벤트간에 상호 재귀를 사용할 수 있습니다. –