結果の型と関数の書込みに慣れていて、説明できない型の不一致のエラーが発生しました。それは正しくコンパイル、あなたはは、以下による関数を適用変更した場合結果の型の型の不一致エラー
init.fsx(8,31): error FS0001: Type mismatch. Expecting a
('a,'b) result
but given a
(('c -> 'a),'d) result
The resulting type would be infinite when unifying ''a' and ''b -> 'a'
:
let apply fr xr =
match fr, xr with
| Success f, Success x -> Success (f x)
| Failure a, Success _ -> Failure a
| Success _, Failure b -> Failure b
| Failure a, Failure b -> Failure (List.concat [a; b])
を
type ('a, 'b) result =
| Success of 'a
| Failure of 'b list
let apply fr xr =
match fr, xr with
| Success f, Success x -> Success (f x)
| Failure _, Success _ -> fr
| Success _, Failure _ -> xr
| Failure a, Failure b -> Failure (List.concat [a; b])
このコードをコンパイルすると、次のエラーを生成します。ここでは最小の例であります
なぜマッチした値を使用するのですか(ここではfrまたはxr)は動作しませんが、新規作成する失敗値はありますか?
ありがとうございました。なぜ最初の試合代替の理由がわからないのですか? '|成功は、X、F成功 - >成功(F x) 'は が第二試合の代替 '上の任意のベアリングを持っている必要があります|失敗_、成功_ - > fr'で が – dumetrulo
問題は 'fr'では'成功(FX)に異なった型を持つ 'と表現が持つ変数を返す必要があるということです...コンパイラにおける不要な制限のように私には聞こえ同じタイプ。 –