簡體   English   中英

箭頭式FRP中的連續信號切換

[英]Continual signal switching in arrowized FRP

我一直在玩Haskell(尤其是Yampa)中的Arrowized FRP庫,但是我不太清楚如何進行“連續”切換。 我的意思是,信號通過信號函數(下面的sf )本身就是一個信號(如圖像的上半部分所示)。

持續切換

由於我不提前知道開關的參數,所以我看不到如何將其簡化為更簡單的二進制開關。

如果有可能的話,該怎么辦? 我希望使用Yampa代碼,但對任何Arrowized FRP代碼都滿意。 我沒有嘗試過其他庫(例如,鈉或反應性香蕉)來了解在這些情況下是否會有同樣的困惑,但是我也對此感到很好奇。

編輯

為了使這一點更加具體,我對圖像進行了標記。 標簽的可能類型為:

  • in :兩個Either Int (Int -> Int)

  • 1 :( (Int -> Int) -> (Either Int (Int -> Int) -> (Int -> Int))

  • sf 可能是:

(Either Int (Int -> Int) -> (Int -> Int)) -> Either Int (Int -> Int) -> (Int -> Int)

(例如, app )。 但這僅在帶有問號的部分代表sf的輸入時。 如果它表示更復雜的開關,則類型為

(Either Int (Int -> Int) -> (Int -> Int)) -> (Int -> Int)

代替。

  • 2out幾乎無關。

這個想法是,我想要的電路表現得好像 sfapp ,用標記信號f表示被施加到函數in ,並用in本身為的雙方的觀點到源f s,並且f š本身。 我想要一個可以處理輸入並根據這些輸入動態更改其行為(構成它的信號功能)的電路。

一方面,在我看來sf實際上不能成為app ,因為在這種情況下,我們沒有ArrowApply 但另一方面,我認為通過某種形式的復雜切換可以實現相同的行為。

您要求有一個由箭頭輸出的箭頭用作箭頭。 這就是ArrowApplyappArrowApply

如果要在諸如圖表之類的循環結構中使用它,則可能需要ArrowLoop,但實際上do表示法使您無論如何都可以相當靈活。

這個答案中有一個關於app的冗長解釋,但是我將復制主要的相關部分:


應用程式到底能做什么? 它的類型甚至沒有(->)。它使您可以將箭頭的輸出用作箭頭。 讓我們看一下類型。

app :: ArrowApply m => m (m b c, b) c

我喜歡用ma ,因為m感覺更像是一個計算和a感覺就像一個值。 有些人喜歡使用類型運算符(中綴類型構造函數),因此您得到

app :: ArrowApply (~>) => (b ~> c, b) ~> c

我們將b ~> c視為一個箭頭,並且將箭頭視為一個包含b s,做某事並給出c s的事物。 因此,這意味着app是一個帶有箭頭和值的箭頭,並且可以產生第一個箭頭在該輸入上將產生的值。

它在類型簽名中沒有-> ,因為使用箭頭編程時,我們可以使用arr :: Arrow (~>) => (b -> c) -> b ~> c將任何函數變成箭頭。您不能將每個箭頭都變成一個函數,因此(b ~> c, b) ~> c可用,其中(b ~> c, b) -> c(b -> c, b) ~> c不可以。

我仍然認為這是ArrowLoop的情況!

你有

in :: Arr () A
sf :: Arr (A -> B, A) B
one :: Arr B (A -> B)
two :: Arr B C

sf只是arr (uncurry ($))

然后,您有了sf >>> (one &&& two) :: Arr (A -> B, A) (A -> B, C)然后可以使用loop (或明智地放置帶有arr swap loop )來獲取Arr AC

那會給你你想要的嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM