Можно ли провести различие между типизированными и нетипизированными вложенными цитатами? - PullRequest
1 голос
/ 04 июля 2011

Например, учитывая <@ let x = <@ 1 @> in x @> и <@ let x = <@@ 1 @@> in x @>, я могу сопоставить оба с Patterns.Let(_, (Patterns.Quote(_) as q), _) -> q, но не могу различить типизированный и нетипизированный q.

1 Ответ

2 голосов
/ 04 июля 2011

Интересно. Кажется, что цитаты всегда хранятся в печатной форме.

Тип подвыражения <@@ 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"

Но я не уверен, как использовать это, чтобы различать два случая в целом. Кажется, что вы можете сделать это, только если посмотрите на контекст (а слишком много возможных контекстов ...)

...