我有代码:
myfun c t = if c == '/' && T.length t > 0 && '/' == T.head t then t else T.singleton c <> t
当我在其上运行LH(stack exec liquid -- MyFile.hs
)时出现错误:
Error: Liquid Type Mismatch
35 | rmSlash c t = if c == '/' && T.length t >= 1 && '/' == T.head t then t else T.singleton c <> t
^
Inferred type
VV : {v : Data.Text.Internal.Text | 0 <= tlen v
&& tlen v == stringlen v
&& v == t}
not a subtype of Required type
VV : {VV : Data.Text.Internal.Text | 1 <= tlen VV}
In Context
t : {t : Data.Text.Internal.Text | 0 <= tlen t
&& tlen t == stringlen t}
我不确定LH认为调用T.head
是不安全的,这意味着什么。但是我用T.length t > 0
检查了长度!解决LH可以通过验证的规范方法是什么?更有趣的是,无需重写代码,仅使用LH。