Akış işlemcileri kullanarak sınırlı bir FRP formu uygulayabilirsiniz. Örneğin, pipes
kütüphaneyi kullanarak, olayların bir kaynak tanımlayabilirsiniz:
mouseCoordinates :: (Proxy p) =>() -> Producer p MouseCoord IO r
... ve benzer fare koordinatlarını alır ve bir tuval üzerinde bir imleç günceller bir grafik işleyicisi tanımlayabilirsiniz:
coordHandler :: (Proxy p) =>() -> Consumer p MouseCoord IO r
>>> runProxy $ mouseCoordinates >-> coordHandler
Ve beklediğiniz sadece yol aday olacağını:
Sonra kompozisyon kullanılarak işleyicisi için fare olayları kanca olacaktır.
Dediğiniz gibi, bu, tek bir aşamalar zinciri için iyi çalışır, ancak daha fazla rastgele topolojiler ne olur? Eh, Proxy
tip pipes
tipinin bir monad trafosu olduğu için, proxy monad transformatörlerini kendi başlarına yerleştirerek herhangi bir rastgele topolojiyi modelleyebilirsiniz.
zipD
:: (Monad m, Proxy p1, Proxy p2, Proxy p3)
=>() -> Consumer p1 a (Consumer p2 b (Producer p3 (a, b) m)) r
zipD() = runIdentityP $ hoist (runIdentityP . hoist runIdentityP) $ forever $ do
a <- request() -- Request from the outer Consumer
b <- lift $ request() -- Request from the inner consumer
lift $ lift $ respond (a, b) -- Respond to the Producer
Bu curried fonksiyonu gibi davranır: Örneğin, burada iki giriş akışları zip şekli şöyledir. Bunu her bir girişe kısmen uygularsınız ve tam olarak uygulandığında çalıştırabilirsiniz.
>>> p3
(1, 4)
(2, 5)
(3, 6)
Bu numara herhangi topoloji ile genelleştirildiğinde:
-- 1st application
p1 = runProxyK $ zipD <-< fromListS [1..]
-- 2nd application
p2 = runProxyK $ p2 <-< fromListS [4..6]
-- 3rd application
p3 = runProxy $ printD <-< p3
Bekleyebileceğiniz sadece yol çalıştırır.Bununla ilgili daha fazla bilgiyi Control.Proxy.Tutorial "Şubeler, fermuarlar ve birleştirmeler" bölümünde bulabilirsiniz. Özellikle, bir örneği kullandığı fork
birleştiriciyi, bir akışı iki çıkışa bölebilirsiniz.
Ah, Benzer bir şey göndermek üzereydim, ama aslında bir AFRP kütüphanesi yazan birinin uzmanlığını erteleyeceğim. :] –
(A) FRP kullanmanın bir asiklik grafik yapısıyla sınırlı olmayacağı anlaşılıyor, bu doğru mu? – fho
Yanıtlarınızdan AFRP'nin herhangi bir yönü terimlerle veya kütüphaneler borusu/borularına sahip olan son akışla uygulanamazsa ne olur? – Davorak