Como fazer o downcast de obj para a opção <obj>?

Tenho uma função que aceita um parâmetro do tipo objeto e precisa fazer o downcast para umoption<obj>.

member s.Bind(x : obj, rest) =
    let x = x :?> Option<obj>

Se eu passar (por exemplo) umOption<string> Comox, a última linha lança a exceção:Não foi possível converter o objeto do tipo 'Microsoft.FSharp.Core.FSharpOption'1 [System.String]' para digitar 'Microsoft.FSharp.Core.FSharpOption'1 [System.Object]'.

Ou, se eu tentar um teste de tipo:

member s.Bind(x : obj, rest) =
   match x with
    | :? option<obj> as x1 -> ... // Do stuff with x1
    | _ -> failwith "Invalid type"

entãox nunca combinaoption<obj>.

Para fazer isso funcionar, atualmente eu tenho que especificar o tipo que a opção contém (por exemplo, se a função receber umaoption<string>, e eu abaixei o parâmetro para isso em vez deoption<obj>, a função funcion

Existe uma maneira de baixar o parâmetro paraoption<obj> sem especificar que tipo de opção contém? Eu tenteioption<_>, option<#obj> eoption<'a> com os mesmos resultados.

Por meio do plano de fundo, o parâmetro precisa ser do tipoobj porque estou escrevendo uma interface para uma mônada, então o Bind precisa vincular valores de tipos diferentes, dependendo da mônada que implementa a interface. Esta mônada específica é uma mônada de continuação, portanto, apenas deseja garantir que o parâmetro sejaSome(x) e nãoNone, depois passex para descansar. (A razão pela qual preciso da interface é porque estou escrevendo um transformador de mônada e preciso de uma maneira de dizer que suas mônadas de parâmetro implementam bind e return.)

Atualizar Consegui contornar isso ao fazer o upcast do conteúdo da opção antes que ela se torne um parâmetro para essa função, mas ainda estou curioso para saber se posso testar o tipo ou converter um objeto (ou parâmetro genérico) em uma opção sem se preocupar com o tipo de opção que contém (assumindo, é claro, que o elenco é válido, ou seja, o objeto é realmente uma opção

questionAnswers(3)

yourAnswerToTheQuestion