【发布时间】:2012-02-14 02:27:52
【问题描述】:
是的,我知道UndecidableInstances 可能很糟糕。我真的很努力地设计我的模块,以便它不需要它但是我有这样的东西:
instance Foo x (C x y) => Bar (C x y) where
...
更改它会使 API 变得更加丑陋。我从来没有从Bar 中派生出Foo,所以没有办法进行循环。
另一方面,启用UndecidableInstances 会使愚蠢的错误容易被忽视。例如,我可能会误写如下内容:
instance Foo x (C x z) => Bar (C x y) where
...
z 永远不会出现在右侧。
问题:是否可以在模块中本地使用UndecidableInstances,即明确标记解除通常终止规则的位置?
当然,这对终止没有帮助,但它会使使用此扩展程序的决定更加明智。
问题 2: 有没有比UndecidableInstances 更弱的东西仍然不能保证终止,但会禁止一些像第二个代码 sn-p 这样的边界线情况?
【问题讨论】:
标签: haskell ghc typeclass type-systems termination