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
,后续构造只能以相同的方式或现有的术语构造,因此应始终终止。
是否有一些类似的情况无法确定总体情况,或者伊德里斯还不能处理这种情况?
答案 0 :(得分:1)
你是对的。伊德里斯还不能处理这种情况。