矢印表記のドキュメンテーション ページを読みましたが、「7.10.3. 独自の制御構造の定義」の下で使用されている「パイプ ブラケット」が何を desugar に変換するのかが完全にはわかりません。
上記のドキュメントの例を考えると
proc x -> do
y <- f -< x+1
(|untilA (increment -< x+y) (within 0.5 -< x)|)
矢印表記を使用しない同等のコードは何ですか?
矢印表記のドキュメンテーション ページを読みましたが、「7.10.3. 独自の制御構造の定義」の下で使用されている「パイプ ブラケット」が何を desugar に変換するのかが完全にはわかりません。
上記のドキュメントの例を考えると
proc x -> do
y <- f -< x+1
(|untilA (increment -< x+y) (within 0.5 -< x)|)
矢印表記を使用しない同等のコードは何ですか?
(| ... |)
角かっこ(通常はバナナかっこと呼ばれます)は、proc表記内でコマンドを操作する関数を適用するためのものです。これらは、コマンドを操作する関数(「演算子」と呼ばれる)を通常のコマンドから明確にするために使用されます。バイナリ中置演算子は特殊なケースであるため、を記述する必要はありません(| (&&&) x y |)
。
脱糖に関しては、Arrows紙のformキーワードのGHCバージョンです。
フォームは次のように定義されます。
proc p-> form e c1 c2 ... cn
=
e(proc p-> c1)(proc p-> c2)...(proc p-> cn)
したがって、次のproc x -> (|untilA (increment -< x+y) (within 0.5 -< x)|)
ようになります。
untilA (proc x -> increment -< x+y) (proc x -> within 0.5 -< x)
これを完全に脱糖して矢印構文が残っていない場合は、次のようになります。
untilA (arr (\x -> x+y) >>> increment) (arr (\x -> x) >>> within 0.5)