Например, учитывая <@ let x = <@ 1 @> in x @>
и <@ let x = <@@ 1 @@> in x @>
, я могу сопоставить оба с Patterns.Let(_, (Patterns.Quote(_) as q), _) -> q
, но я не могу различить типизированный и нетипизированный q
.
Можно ли различать типизированные и нетипизированные вложенные цитаты?
Ответы (1)
Интересно. Создается впечатление, что цитаты всегда хранятся в типизированном виде.
Тип подвыражения <@@ 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"
Но я не уверен, как использовать это, чтобы различать два случая в целом. Кажется, что вы можете сделать это, только если посмотрите на контекст (а возможных контекстов слишком много...)
person
Tomas Petricek
schedule
04.07.2011
Верно, и, кроме того, хотя
Type
любой вложенной цитаты всегда является общим, фактический тип всегда не является общим.
- person Stephen Swensen; 04.07.2011