gpt4 book ai didi

haskell - 如何在本地使用 UndecidableInstances?

转载 作者:行者123 更新时间:2023-12-03 22:15:31 26 4
gpt4 key购买 nike

是的,我知道 UndecidableInstances可能很糟糕。我真的很努力地设计我的模块,以便它不需要它但是我有这样的东西:

instance Foo x (C x y) => Bar (C x y) where

...

改变它会使 API 变得更加丑陋。我从不推导出 FooBar所以没有办法做一个循环。

另一方面启用 UndecidableInstances使愚蠢的错误容易被忽视。例如,我可能会误写如下内容:
instance Foo x (C x z) => Bar (C x y) where

...

在哪里 z永远不会出现在右侧。

问题:是否可以使用 UndecidableInstances在模块中本地,即明确标记解除通常终止规则的地方?

当然,它对终止没有帮助,但它会使使用此扩展的决定更加明智。

问题二:有没有比 UndecidableInstances 更弱的东西这仍然不能保证终止,但会禁止一些像第二个代码片段这样的边界线情况?

最佳答案

到目前为止,语言编译指示是每个模块的,所以第一个问题的答案是否定的。至于第二个问题,我不太确定,但我知道除了 UndecidableInstances 之外没有其他扩展可以允许该实例。

但是,UndecidableInstances 并没有那么糟糕,它只是允许类型检查器尝试解析无法证明终止的实例。但是,上下文堆栈阻止它实际上永远循环。

关于haskell - 如何在本地使用 UndecidableInstances?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9270899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com