我想写一个函数来强制其参数在语法上是一个常量字符串。这是我尝试过的:
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效应的先决条件。在当前状态下,有什么方法可以做我想做的事?
答案 0 :(得分:0)
我不知道您是否最终找到了解决方案,但是隐式元参数呢?
它们以某种方式允许在函数调用时运行to
代码,从而使Tac
可用。
稍微修改一下代码似乎可行:
quote