这是Idris整体检查器的限制,还是我错过了什么?

时间:2017-03-29 21:26:26

标签: idris

Idris声称以下代码不是全部:

data Foo = Bar (Maybe Foo)

foos : Foo -> List Foo
foos (Bar (Just foo)) = foo :: (foos foo)
foos (Bar Nothing) = Nil

相反,我可以做

foos t@(Bar (Just foo)) = foo :: foos (assert_smaller t foo)

但这似乎没必要。显然,我创建的第一个Foo必须构造为Bar Nothing,后续构造只能以相同的方式或现有的术语构造,因此应始终终止。

是否有一些类似的情况无法确定总体情况,或者伊德里斯还不能处理这种情况?

1 个答案:

答案 0 :(得分:1)

你是对的。伊德里斯还不能处理这种情况。