Вы не можете. Вы можете цитировать только код, то есть любое правильное выражение F # . Определения типов рассматриваются не как код, а как определения.
Что вы можете сделать, это поставить атрибут ReflectedDefinition
для членов типа:
type MyType (name : string) =
[<ReflectedDefinition>] member x.Name = name
Если вы хотите получить AST членов, которые имеют ReflectedDefinition
, вы можете использовать функцию Expr.TryGetReflectedDefinition
.
Например, этот пример кода печатает AST всех элементов отраженного определения 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 _ -> ()
()