Haskell图表中断堆栈构建

Haskell图表中断堆栈构建,haskell,haskell-stack,haskell-chart,Haskell,Haskell Stack,Haskell 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 statemen

尝试使用图表学习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
/private/var/folders/m2/qwhdrn_d46z99_3vxchdwn7r0000gn/T/stack5630/Chart-1.9/Graphics/Rendering/Chart/State.hs:102:3:错误:
•没有(Control.Monad.Fail.MonadFail标识)的实例
由do语句引起的
具有可故障模式(c:cs)'

•在“do”块的stmt中:(c:cs)您可以选择解决该问题。您正在尝试使用非穷举模式在“do”块中进行模式匹配。为此:

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

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

  • 你可以用状态单子。如果monad transformer堆栈中较低的monad是MonadFail的实例,那么我们可以将最高的monad也作为MonadFail的实例

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


来源:

我不熟悉这个库,但我相当肯定,您可以通过在GHC中禁用
MonadFailDesugaring
来消除这个错误(默认情况下,它从8.6.1开始一直处于启用状态)-请参阅@Robin Zigmond:但这是一种语言pragma,对吗?我可以从源文件显式禁用(或更改)pragma而不是更改库吗?在文件顶部,{-#LANGUAGE NoMonadFailDesugaring}@a Tayler:谢谢。不知怎的忽略了这一点。