采用函数tail
,如列表库所示:
tail : (l : List a) -> {auto ok : NonEmpty l} -> List a
tail [] {ok=IsNonEmpty} impossible
tail (x::xs) {ok=p} = xs
现在尝试用有效的计算替换输出类型:
randomIndex : (l : List a) -> {auto ok : NonEmpty l} -> Eff Nat [RND]
randomIndex [] {ok=IsNonEmpty} impossible
randomIndex (x::xs) {ok=p} = pure 0 -- whatever
您收到错误Clauses have differing numbers of arguments
。
这似乎是错误的。有谁知道为什么会这样吗?可能是因为Eff
是某些函数类型的类型同义词吗?