Haskell Chart 破坏堆栈构建

标签 haskell haskell-stack haskell-chart

尝试使用 Chart 来学习 Haskell。建筑物中的包中断:

/private/var/folders/m2/qwhdrn_d46z99_3vxchdwn7r0000gn/T/stack5630/Chart-1.9/Graphics/Rendering/Chart/State.hs:102:3: error:
    • No instance for (Control.Monad.Fail.MonadFail Identity)
        arising from a do statement
        with the failable pattern ‘(c : cs)’
    • In a stmt of a 'do' block: (c : cs) <- use shapes
      In the second argument of ‘($)’, namely
        ‘do (c : cs) <- use shapes
            shapes .= cs
            return c’
      In the expression:
        liftCState
          $ do (c : cs) <- use shapes
               shapes .= cs
               return c
    |
102 |   (c:cs) <- use shapes

我太缺乏经验,不知道如何处理这样的问题。请指教。

最佳答案

您有一些选项可以解决该问题。您正在尝试使用非详尽模式在“do” block 中进行模式匹配。为了做到这一点:

  • 您可以禁用 MonadFailDesugaring 扩展。在文件顶部添加 {-# LANGUAGE NoMonadFailDesugaring #-} 或使用标志 -XNoMonadFailDesugaring 进行编译。但此扩展无法在 GHC 8.8 及更高版本中停用。

  • 您可以定义或派生 MonadFail 实例。

  • 您可以使用 State monad。如果 monad 转换器堆栈中较低的 monad 是 MonadFail 的实例,那么我们也可以使最高的 monad 成为 MonadFail 的实例。

  • 停止并执行显式和详尽的模式匹配。

来源:http://www.fyrbll.me/haskell/language-extensions/monad-fail-desugaring/processed.html

关于Haskell Chart 破坏堆栈构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55359075/

相关文章:

haskell - 如何制作约束蕴涵函数(||-)? (关联类型同义词)

Haskell ReplicateM IO

anaconda - 为jupyter笔记本安装IHaskell内核 - Linker无法找到lgmp

haskell - Stack项目依赖源码位置

haskell - 如何使用 runhaskell 增加堆栈大小?

haskell - 使用 Haskell 图表进行人类可读的数字

haskell - 在 TemplateHaskell 中,我如何确定导入的模块已被重命名?

haskell - 如何在状态 monad 中使用 Debug.Trace.trace?