Почему я не могу использовать pattern matching function
в вычислительных выражениях без реализации члена Zero
?
Например, может ли кто-нибудь объяснить, почему он позволяет разрешать pattern matching expression
, но не pattern matching function
?
type MaybeBuilder() =
member __.Bind (x, f) = match x with Some a -> f a | None -> None
member __.Return x = Some x
let maybe = MaybeBuilder()
// Errors: FS0708 This control construct may only be used
// if the computation expression builder defines a 'Zero' method
maybe { Some 1 |> function Some x -> return x | None -> return 0 }
maybe { Some 1 |> fun x -> match x with Some x' -> return x' | None -> return 0 }
// Ok
maybe { match Some 1 with Some x -> return x | None -> return 0 }
Zero
и посмотреть, что получится? Я ожидаю, что вы будете удивлены - проблема, скорее всего, не в том, что вы ожидаете. - person kvb   schedule 12.01.2018