例如,在给定<@ let x = <@ 1 @> in x @>
和<@ let x = <@@ 1 @@> in x @>
的情况下,我可以将其与Patterns.Let(_, (Patterns.Quote(_) as q), _) -> q
匹配,但我无法区分已键入和未列出的q
。
答案 0 :(得分:2)
有趣。似乎引用始终以键入的形式存储。
引号内的<@@ 1 @@>
子表达式的类型始终为Expr<int>
。但是,变量x
的类型在您的两个引用中有所不同:
match q1 with
| Patterns.Let(v, (Patterns.Quote(_) as q), _) when v.Type = typeof<Expr> -> "untyped"
| Patterns.Let(_, (Patterns.Quote(_) as q), _) -> "typed"
| _ -> "other"
但我不确定如何使用它来区分这两种情况。看来你只能看一下上下文(并且有太多可能的上下文......)