3

次の行は、コンパイラによって受け入れられます。

input |> Prop.forAll <| fun (a , b) -> add a b = add b a

ただし、後方パイプライン演算子を括弧に置き換えると、次のエラーが表示されます。

input |> Prop.forAll ( fun (a , b) -> add a b = add b a )

型の不一致。Arbitrary を期待 -> 'a が与えられた ('b -> 'c) -> プロパティ タイプ 'Arbitrary' はタイプ ''a -> 'b と一致しません

このエラーの意味がよくわかりません。逆方向パイプライン演算子はコンパイルされるのに、括弧がコンパイルされないのはなぜですか?

付録:

module Arithmetic

let add a b =
    a + b

open FsCheck
open FsCheck.Xunit

[<Property(MaxTest=1000, QuietOnSuccess=true)>]
let ``'a + 'b equals 'b + 'a`` () =

    // Declare generators per type required for function
    let intGenerator = Arb.generate<int>

    // Map previously declared generators to a composite generator 
    // to reflect all parameter types for function
    let compositeGenerator = (intGenerator , intGenerator) ||> Gen.map2(fun a b -> a , b)

    // Pull values from our composite generator
    let input = Arb.fromGen compositeGenerator

    // Apply values as input to function
    input |> Prop.forAll <| fun (a , b) -> add a b = add b a
4

3 に答える 3