質問

私はなぜこれを興味深い

let f = (fun a b -> a, b) >> obj.Equals
.

エラー

アクセス可能なメンバーまたはオブジェクトコンストラクタ '' equals 'という名前の引数

しかしこれは作品

let f = (fun a -> a, a) >> obj.Equals
.

役に立ちましたか?

解決

タイプを検討してください。(>>)には('a -> 'b) ->('b -> 'c) -> ('a -> 'c)がありますが、'a -> ('b -> 'a*'b)obj * obj -> boolの引数で呼び出すことを試みます。

もちろん、バイナリと単項関数を構成するための新しいコンビネットを定義することができます。

let ( >>* ) f g a b = f a b |> g
.

その場合は、(>>)の代わりに標本で使用できます。

他のヒント

新しいコンビネット演算子を定義せずに:

let f = (fun a b -> a, b) >> (<<) obj.Equals
.

>> (<<)は素晴らしいトリックであり、さらに引数のために拡張することもできます:

let compose3 f g = f >> (<<) ((<<) g)
val compose3 : ('a -> 'b -> 'c -> 'd) -> ('d -> 'e) -> ('a -> 'b -> 'c -> 'e)
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top