我想编写一个函数,强制它的参数在语法上是一个常量字符串。这是我尝试过的:
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 效应中。在目前的情况下,有什么办法可以做我想做的事吗?