¿Cómo bajar de obj a la opción <obj>?

Tengo una función que toma un parámetro de tipo objeto y necesita convertirlo en unoption<obj>.

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

Si paso (por ejemplo) unOption<string> comox, la última línea arroja la excepción:No se puede emitir un objeto del tipo 'Microsoft.FSharp.Core.FSharpOption'1 [System.String]' para escribir 'Microsoft.FSharp.Core.FSharpOption'1 [System.Object]'.

O, si intento una prueba de tipo:

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

luegox nunca coincide conoption<obj>.

ara que esto funcione, actualmente tengo que especificar el tipo que contiene la opción (por ejemplo, si la función se pasa aoption<string>, y rechacé el parámetro a eso en lugar deoption<obj>, la función funciona.

¿Hay alguna manera de que pueda bajar el parámetro aoption<obj> sin especificar qué tipo contiene la opción? He intentadooption<_>, option<#obj> yoption<'a> con los mismos resultados.

A modo de fondo, el parámetro debe ser del tipoobj porque estoy escribiendo una interfaz para una mónada, por lo que Bind necesita vincular valores de diferentes tipos dependiendo de la mónada que implemente la interfaz. Esta mónada en particular es una mónada de continuación, por lo que solo quiere asegurarse de que el parámetro seaSome(x) y noNone, luego pasex a descansar. (La razón por la que necesito la interfaz es porque estoy escribiendo un transformador de mónada y necesito una forma de decirle que sus mónadas de parámetros implementan enlace y retorno).

Actualizar Me las arreglé para evitar esto al subir el contenido de la opción antes de que se convierta en un parámetro para esta función, pero todavía tengo curiosidad por saber si puedo hacer una prueba de tipo o lanzar un objeto (o parámetro genérico) a una opción sin preocuparse por el tipo que contiene la opción (suponiendo, por supuesto, que el reparto sea válido, es decir, el objeto realmente es una opción).

Respuestas a la pregunta(3)

Su respuesta a la pregunta