Я хотел бы написать функцию, которая обеспечивает, чтобы ее аргумент синтаксически был константной строкой.Вот что я попробовал:
module Test
module R = FStar.Reflection
let is_literal (t: R.term) =
match R.inspect_ln t with
| R.Tv_Const (R.C_String _) -> true
| _ -> false
let check_literal (s: string { normalize (is_literal (`s)) }) =
()
let test () =
check_literal ""; // should work
let s = "" in
check_literal s // should not work
Однако я почти уверен, что статические цитаты (с `) - это не то, что мне нужно, а динамические цитаты с quote
.Но это поставило бы мое предварительное условие в эффект Tac.Есть ли способ сделать то, что я хочу в текущем положении вещей?