gpt4 book ai didi

Haskell: 'tell ["abc“]' evaluation throwing "非类型变量参数”错误

转载 作者:行者123 更新时间:2023-12-02 16:24:46 24 4
gpt4 key购买 nike

当我尝试在 GHCI 中评估 tell ["abc"] 时,它会抛出以下错误:

Non type-variable argument
in the constraint: MonadWriter [[Char]] m
(Use FlexibleContexts to permit this)

如果我tell ["abc"]::Writer [String] (),它的评估不会出现问题,但为什么这是必要的?

最佳答案

tell 的返回类型比 Writer 更通用:它使用 the MonadWriter type class以写作精神抽象所有单子(monad)。

tell :: MonadWriter w m => w -> m ()

因此,当您在没有类型注释的情况下编写 tell ["abc"] 时,类型检查器会将 w[String] 统一起来,但是它没有任何可以用来优化m的信息。所以你得到

tell ["abc"] :: MonadWriter [String] m => m ()

Haskell 98 不支持将 MonadWriter 等约束应用于 [String] 等具体类型参数,因此上述内容在 Haskell 98 中无效。开启 the FlexibleContexts language extension启用对此类类型的支持。

由于 Writer wMonadWriter w 的实例(当 wMonoid 的实例时), tell 的主体类型可以专门化为 Writer。这就是为什么当您为其提供 Writer 类型注释时它会起作用。

tell :: w -> Writer w ()

关于Haskell: 'tell ["abc“]' evaluation throwing "非类型变量参数”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41539611/

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