10

矢印表記のドキュメンテーション ページを読みましたが、「7.10.3. 独自の制御構造の定義」の下で使用されている「パイプ ブラケット」が何を desugar に変換するのかが完全にはわかりません。

上記のドキュメントの例を考えると

proc x -> do
    y <- f -< x+1
    (|untilA (increment -< x+y) (within 0.5 -< x)|)

矢印表記を使用しない同等のコードは何ですか?

4

2 に答える 2

15

(| ... |)角かっこ(通常はバナナかっこと呼ばれます)は、proc表記内でコマンドを操作する関数を適用するためのものです。これらは、コマンドを操作する関数(「演算子」と呼ばれる)を通常のコマンドから明確にするために使用されます。バイナリ中置演算子は特殊なケースであるため、を記述する必要はありません(| (&&&) x y |)

脱糖に関しては、Arrows紙のformキーワードのGHCバージョンです。

フォームは次のように定義されます。

proc p-> form e c1 c2 ... cn

=

eproc 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)
于 2012-01-15T11:41:30.393 に答える