「値がないのを知らせるのが Option 型として、では何故値がなかったかを知らせるにはどうすればいい?」という問いに対して、「Haskell だと Either ってのがある」教えてもらったので、F# で真似てみました。
まず Either 型を定義する。
type Either<'a,'b> = Right of 'a | Left of 'b;;
Either 型を渡すと、以下の処理をする関数を作る。
- 成功(=Right) の時は、Right で渡された値の和を計算し(= a + b)、文字列で戻す。
- 失敗(=Left) の時は Left で渡された値に "Error " を付加して戻す。
let f x = match x with | Right (a:int,b:int) -> string(a+b) | Left (e:int) -> sprintf "Error %d" e ;;
実行。
> f (Either.Right (100,200));; val it : string = "300" > f (Either.Left 101);; val it : string = "Error 101"
この方法だと 成功(Right)か失敗(Left)かの評価を、Either 型を受け取る側に強いることができますね。