Компилятор принимает следующую строку:
input |> Prop.forAll <| fun (a , b) -> add a b = add b a
Однако, когда я заменяю оператор обратного конвейера скобками, я получаю сообщение об ошибке:
input |> Prop.forAll ( fun (a , b) -> add a b = add b a )
Несоответствие типов. Ожидается Произвольное -> 'a, но задано ('b -> 'c) -> Свойство Тип 'Произвольный' не соответствует типу ''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
Arb.generate<int*int>
и полностью убитьcompositeGenerator
. - person Dax Fohl   schedule 17.08.2016