gpt4 book ai didi

haskell - 为什么 ghci 在这种情况下不提供预期的模糊类型变量错误?

转载 作者:行者123 更新时间:2023-12-02 20:53:54 25 4
gpt4 key购买 nike

我正在处理a Haskell book 。它有以下示例:

ghci> Right 3 >>= \x -> return (x + 100)  

预计会因以下错误而崩溃:

<interactive>:1:0:  
Ambiguous type variable `a' in the constraints:
`Error a' arising from a use of `it' at <interactive>:1:0-33
`Show a' arising from a use of `print' at <interactive>:1:0-33
Probable fix: add a type signature that fixes these type variable(s)

当我运行它时:

$ ghci

Prelude> Right 3 >>= \x -> return (x + 100)

我得到:

Right 103

即我没有收到预期的错误。

现在也许编译器或库已经改变 - 但我不知道如何验证这一点。

我的问题是:为什么 ghci 在这种情况下不提供预期的模糊类型变量错误?

最佳答案

这是由于-XExtendedDefaultRules现在在 GHCi 中默认启用。要将其关闭(并获取预期的错误消息):

ghci> :set -XNoExtendedDefaultRules
ghci> Right 3 >>= \x -> return (x + 100)
<interactive>:2:1: error:
• Ambiguous type variable ‘a0’ arising from a use of ‘print’
prevents the constraint ‘(Show a0)’ from being solved.
Probable fix: use a type annotation to specify what ‘a0’ should be.
These potential instances exist:
instance (Show b, Show a) => Show (Either a b)
-- Defined in ‘Data.Either’
instance Show Ordering -- Defined in ‘GHC.Show’
instance Show Integer -- Defined in ‘GHC.Show’
...plus 23 others
...plus 11 instances involving out-of-scope types
(use -fprint-potential-instances to see them all)
• In a stmt of an interactive GHCi command: print it

此扩展添加了许多额外的方法来默认不明确的代码。在您的例子中,您有一个 Num b => Either a b 类型的表达式。 Regular Haskell defaulting rules告诉我们 b 应默认为 Integer。扩展规则(请参阅上面的链接)另外将 a 默认为 ()

关于haskell - 为什么 ghci 在这种情况下不提供预期的模糊类型变量错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48055640/

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