Bạn không thể. Bạn chỉ có thể trích dẫn mã, tức là, bất kỳ số valid F# expression nào. Định nghĩa kiểu không được coi là mã, nhưng định nghĩa.
Những gì bạn có thể muốn làm là đặt ReflectedDefinition
thuộc tính trên một loại thành viên:
type MyType (name : string) =
[<ReflectedDefinition>] member x.Name = name
Nếu bạn muốn lấy AST của các thành viên có ReflectedDefinition
bạn có thể sử dụng chức năng Expr.TryGetReflectedDefinition
.
ví dụ, mẫu mã này in ASTs của tất cả các thành viên định nghĩa phản ánh của 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 _ ->()
()