09/01/05 22:53:07
>>401
天才じゃないが答えてみる
関数 f の型は
val f : 'a option -> 'b option -> 'c option -> ('a * 'b * 'c) option
になるわけだけど
f (Some 3) None (Some 1.5)
という式を評価しても 'b の型は最後まで確定しないわな
それはよろしくない(→というのが超大雑把な value restriction の説明)
つまり 'b の型を明らかにすれば error を消せる
簡単には適当な型注釈をつけてやれば OK で
f (Some 3) (None : int) (Some 1.5)
とか、あるいは
(f (Some 3) None (Some 1.5) : (int * int * float) option)
とかすればよい
しかし通常は文脈から 'b が具体的な型に決まることが多い
if true then f (Some 3) None (Some 1.5) else f None (Some 1) None
だもんで型注釈に頼るような場面は少ないように思われる