gpt4 book ai didi

haskell - 在本地使用 UndecidableInstances pragma 是否会对编译终止产生全局影响?

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

假设 Haskell 库设计者决定使用 UndecidableInstances 由于某些原因。该库编译良好。现在假设某个程序使用该库(例如定义其类型类的一些实例),但不使用扩展。编译失败(不会终止)会发生吗?

如果这种情况可能发生,我很乐意看到一个例子。例如,如 mtl使用 UndecidableInstances很多,是否可以编写一个依赖于 mtl(或任何其他使用扩展的标准库)的程序,不使用 UndecidableInstances本身,但由于不确定性而无法编译?

最佳答案

好问题!

一般来说,这当然是可能的。考虑这个模块:

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies, UndecidableInstances #-}

module M where

class C a b | a -> b where
f :: a -> b

instance C a b => C [a] [b]
where f = map f

它自己编译就好了。但是,如果您导入此模块并定义
g x = x + f [x]

你会得到
Context reduction stack overflow; size = 201
Use -fcontext-stack=N to increase stack size to N
C [b] b
In the second argument of `(+)', namely `f [x]'
In the expression: x + f [x]
In an equation for `g': g x = x + f [x]

关于 mtl 实例,我看不出这样的事情是怎么可能的,但我也没有证据证明它不是。

关于haskell - 在本地使用 UndecidableInstances pragma 是否会对编译终止产生全局影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14476230/

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