gpt4 book ai didi

haskell - 为什么这个类型类只能用 "-XNoMonomorphismRestriction"编译?

转载 作者:行者123 更新时间:2023-12-04 22:30:57 24 4
gpt4 key购买 nike

我收到了一些奇怪的类型类错误,形式为“没有由表达式类型签名引起的(测试 a0)的实例”。这是我能想到的违规代码的最简单版本:

class Test a where
test :: a

foo = test

添加类型没有帮助:
foo = test :: Test a => a

但是,添加一个 Test 实例确实可以编译:
instance Test Int where
test = 0

这不是真的可以接受,因为我希望我的实例在其他地方声明。

最后,将 -XNoMonomorphismRestriction 传递给 ghc(i) 也允许它进行编译。虽然现在这已经足够好了,但我不明白这个扩展有什么作用,为什么有必要,或者可能潜伏着什么缺点。

最佳答案

作为禁用整个文件的单态限制的替代方法(这是相当无害的,但可能会导致一些非多态的值的意外重新计算),添加类型确实有帮助,但您必须将其作为签名在顶级:

foo :: Test a => a
foo = test

如果在 test 之后添加它,它被认为只是子表达式 test 上的一个注释,并且不会关闭 foo 本身的单态限制。

关于haskell - 为什么这个类型类只能用 "-XNoMonomorphismRestriction"编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634226/

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