一見些細な問題で立ち往生しています。ポイントフリーの方法で記述されている場合、関数で例外を処理できません。
次の2つの機能を検討してください。
let divide1 x y =
try
x / y
with
| :? System.DivideByZeroException -> 42
let divide2 =
try
(/)
with
| :? System.DivideByZeroException -> fun _ _ -> 42
let x1 = divide1 5 0 // works fine
let x2 = divide2 5 0 // doesn't handle an exception
どちらの関数も一見同じように見えますが、タイプが異なります。
val divide1: int -> int -> int
val divide2: (int -> int -> int)
明らかに、divide2
例外を処理しようとさえしません。単に演算子を返します。
divide2
例外を適切な方法で処理するために何ができますか(特にその引数を宣言することを除く)?