我尝试过以下操作,但无效。
exception MyError<'a> of 'a
exception 'a MyError of 'a
我是否必须使用长格式:
type MyError<'a>(value) =
inherit System.Exception()
member this.Value : 'a = value
答案 0 :(得分:6)
根据规范,您必须使用长格式。我没有找到任何解释为什么会这样,但是异常声明的语法看起来像这样(也许还暗示了为什么行为如你所描述的那样):
exception-defn:= attributes opt exception union-type-case-data
union-type-case-data:=
ident (nullary union case)
ident of 类型* ... *类型(n-ary union case)
ident:uncurried-sig (n-ary union case)
这非常有趣,因为它表明异常声明更像是歧视的联合案例而不是类似的类型。我想你可以想到一个异常声明...
exception MyExn of int
...作为声明向标准System.Exception
类型添加新案例(如果它是一个有区别的联盟)。在这种情况下,您不希望能够使用泛型类型参数:
type System.Exception =
| ...
| MyExn of int