私のDUが期待通りに動作するのに問題があります。私があれば、私が 『エラー』を作成することができている理由を私は理解できないタイプ<「>かのSystem.ExceptionF#識別されたユニオンタイプの問題
open System
// New exceptions.
type MyException(msg : string) = inherit Exception(msg)
type MyOtherException(msg : string) = inherit MyException(msg)
// DU to store result or an exception.
type TryResult<'a, 't> =
| Result of 'a
| Error of 't :> Exception
//This is fine.
let result = Result "Test"
// This works, doing it in 2 steps
let ex = new MyOtherException("Some Error")
let result2 = Error ex
// This doesn't work. Gives "Value Restriction" error.
let result3 = Error (new MyOtherException("Some Error"))
から派生した例外の結果を持っているいずれかの新しいDUを定義しました私は2つのステップでそれを行いますが、同じ行を1行で実行すると、値の制限エラーが発生します。
何が欠けていますか?
おかげ@kvbでポストを見てみると
UPDATE
は、私はエラーを作成する必要があるタイプの情報を追加するたびに少し冗長に見えたので、私は追加のメソッドにそれを包んエラーを作成し、もう少し簡潔です。
// New function to return a Result
let asResult res : TryResult<_,Exception> = Result res
// New function to return an Error
let asError (err : Exception) : TryResult<unit,_> = Error(err)
// This works (as before)
let myResult = Result 100
// This also is fine..
let myResult2 = asResult 100
// Using 'asError' now works and doesn't require any explicit type information here.
let myError = asError (new MyException("Some Error"))
「ユニット」でエラーを指定すると、私がまだ予期していない結果が生じるかどうかはわかりません。
あなたが行うことができますTryResult<unit,_> = Error(err)
ありがとうございます。意味あり。私は私の質問を更新し、うまく動作するように見える追加のエラー作成メソッドを追加し、それを少しきちんと保ちます。問題は、タイプがTryResultとして指定されていることだけです。これがダウンサイドになるかどうか不明です。 –
Moog