通过Liquid Haskell中的Data.Text.head修复错误的规范方法吗?

时间:2019-06-03 10:12:49

标签: haskell liquid-haskell

我有代码:

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。

0 个答案:

没有答案