Я хочу определить «отношения», но определен как функции для Identity <'a>, seq <' a> и Option <'a>.
Я никогда не определял перегруженные операторы в F #.
Было бы неплохо использовать "+"!
open FSharpPlus.Data
type Relation =
// ('a -> Identity<'b>) -> ('b -> 'c) -> ('a -> 'c)
static member (+) (f,g) =
fun a -> g ((f a) |> Identity.run)
// ('a -> #seq<'b>) -> ('b -> #seq<'c>) -> ('a -> seq<'c>)
static member (+) (f , g ) =
fun a -> seq {
for b in f a do
yield! g b
}
// ('a -> seq<'b>) -> ('b -> Identity<'c>) -> ('a -> seq<'c>)
static member (+) (f,g) =
fun a -> seq {
for b in f a do
yield Identity.run (g b)
}
это компилируется ...
тогда я пытаюсь использовать его и;
member x.foo () =
let f1 : int -> Identity<int> = fun x -> Identity x
let f2 : int -> seq<int> = fun x -> Seq.singleton x
let x = f2 + f1
()
Я получаю:
FS0043 Expecting a type supporting the operator '+' but given a function type. You may be missing an argument to a function.
Я что-то делаю глупо?(Да!)