2016-05-01 4 views
2

OCamlの新機能です。

let main_t = Term.(pure main $ address $ port $ pid_file $ log_file $ dbConf) 

「$」記号の意味は何ですか?

+3

文法ではなく、 'cmdliner'の関数です。もしあなたがメルリンを持っていれば、それを簡単にチェックすることができます。 –

+0

特に、中置関数です。 http://erratique.ch/software/cmdliner/doc/Cmdliner.Term.html#VAL($) – antron

答えて

2

OCamlでは、独自の接尾辞と接頭辞演算子を定義することができます。 cmdlinerライブラリーではオペレータ$は、次のように定義されます

val ($) : ('a -> 'b) t -> 'a t -> 'b t 
    (** [f $ v] is a term that evaluates to the result of applying 
     the evaluation of [v] to the one of [f]. *) 

、実際に(Cmdlinerにapp命名)apply機能の中置形です。引数を累積するために使用されます。基本的に、フォームpure f $a $b $c $dの構築物は、一般的に、このなど、タイプab 4つの引数を取る関数fを受け入れcd、所与、aタイプa Term.tの値であること、bb Term.tの値でありますタイプセーフな可変関数を構築するためのパターンです。詳細については、パターンについてはApplicative Programming with Effects用紙をお読みください。

1

標準的なocamlには特別な意味はありません。あなたの場合、これは、特定の構文が定義される用語モジュールから来ています。 (どのモジュールですか?)

+0

これは、cmdlinerライブラリによって定義された中置演算子です。http://erratique.ch/software/cmdliner/doc/Cmdliner .Term.html#VAL($) – antron

4

$のOCamlには定義済みの意味はありません。これは中置演算子として定義できます。意味はあなたが使っている図書館から来なければなりません。

私が推測しなければならないのは、$が低優先順位関数アプリケーション演算子として定義されていると思います。これはHaskellでこれに使用されており、しばしば非常に便利です。

+0

はい、ファンクターアプリケーションのようです。しかし、Haskellの通常のアプリケーションでは '$'ではありません。 '<$>'は(適用可能な)関数アプリケーションです。 –

+0

あなたが正しいかどうかは間違いありませんが、私が覚えていたことを忘れてしまったApplicative :-) –

関連する問題