Haskell图表打破了堆栈构建

问题描述 投票:0回答:1

尝试使用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

我经验不足,不知道如何去解决这样的问题。请赐教。

haskell haskell-stack haskell-chart
1个回答
1
投票

你有一些选项来解决这个问题。你正试图在 "do "块中用非详尽的模式进行模式匹配。为了做到这一点。

  • 你可以禁用MonadFailDesugaring扩展。在文件顶部添加{-# LANGUAGE NoMonadFailDesugaring #-},或者在编译时使用-XNoMonadFailDesugaring标志。但在 GHC 8.8 或更高版本中,这个扩展名不能被停用。

  • 你可以定义或派生一个MonadFail实例。

  • 你可以使用State monad。如果单项式变换堆栈中较低的单项式是MonadFail的实例,那么我们可以将最高的单项式也作为MonadFail的实例。

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

来源于 http:/www.fyrbll.mehaskelllanguage-extensionsmonad-fail-desugaringprocessed.html

© www.soinside.com 2019 - 2024. All rights reserved.