0

以前、この件について質問したことがありますが、私が何を尋ねているのか本当にわかっていなかったと思います。私は自分の問題を少しよく理解していると思います。

私は矢印化された FRP ライブラリである netwire を使用していますが、この矢印ループを実装するのに問題があります。

私は持っている

f :: ArrowLoop r =>  a  -> r [a]  a
g :: ArrowLoop r => [a] -> r ()  [a]

g基本的に、指定されたリスト内のすべての要素を他のすべての要素のリストと ...um... を使用して結び付けます...これfは言葉を使用して実際に言うのは難しいので、長さ 4 のリストの例を示します。

g [x0, x1, x2, x3] = proc _ -> do
  rec
     y0 <- f x0 -< [y1, y2, y3]
     y1 <- f x1 -< [y0, y2, y3]
     y2 <- f x2 -< [y0, y1, y3]
     y3 <- f x3 -< [y0, y1, y2]
  returnA -< [y0, y1, y2, y3]

(私はヘルパー関数を持っています、それはのselects :: [a] -> [(a,[a])]ようなものをに変え[x,y,z]ます[(x, [y,z]), (y, [x,z]), (x, [x,y])]

今...私はこのハードコードされたバージョンをコンパイルしましたが、これはすでに機能しており、私が最も望んでいた結果を正確に提供します. ファンキーな <> 問題なしで実行されます。

この「正確な」ことを行うことが可能かどうかは誰にもわかりませんが、一般的な数のリスト要素を使用しますか?


参考までに、私の実装はselectsSimon Marlowによるものです。

selects :: [a] -> [(a,[a])]
selects = go []
  where
    go xs [] = []
    go xs (y:ys) = (y,xs++ys) : go (y:xs) ys
4

1 に答える 1