Vous ne pouvez pas. Vous ne pouvez citer que du code, c'est-à-dire valid F# expression. Les définitions de type ne sont pas considérées comme du code, mais comme des définitions.
Ce que vous pouvez faire est de mettre ReflectedDefinition
attribut sur un des membres du type:
type MyType (name : string) =
[<ReflectedDefinition>] member x.Name = name
Si vous souhaitez récupérer l'AST des membres qui ont ReflectedDefinition
vous pouvez utiliser la fonction Expr.TryGetReflectedDefinition
.
, par exemple cet exemple de code imprime de tous les membres RSHS de définition réfléchis MyType
:
open Microsoft.FSharp.Quotations
open System.Reflection
type MyType (name : string) =
[<ReflectedDefinition>] member x.Name = name
let mis = typeof<MyType>.GetMembers()
for mi in mis do
try
match Expr.TryGetReflectedDefinition(mi :?> MethodBase) with
| Some(e) -> printfn "%A" e
| None ->()
with _ ->()
()