В F# у меня есть функция, которая возвращает экземпляры System.Linq.Expression:
and System.Object with
member this.ToExpression() =
match this with
| :? System.Int32 -> Expression.Constant(this) :> Expression
| :? System.Boolean -> Expression.Constant(this) :> Expression
| :? Tml.Runtime.Seq as s -> s.ToExpression()
| _ -> failwith "bad expression"
Если я пропущу приведение типов к возвращаемым значениям, F# выведет тип возвращаемого значения функции для ConstantExpression. Моей первой мыслью было явно пометить возвращаемый тип как : #Expression, но это не сработало. Есть ли более элегантный способ сделать это, который не требует ручного приведения возвращаемых типов к наиболее общему типу?
Спасибо.
Редактировать: Спасибо всем за ответы. Я пойду с явным типом возвращаемого значения + сценарием upcast.