gpt4 book ai didi

haskell - 是否没有标准(任一)monad 实例?

转载 作者:行者123 更新时间:2023-12-03 01:35:03 27 4
gpt4 key购买 nike

我的印象是某处有 Either a 的实例,但我似乎找不到它。我尝试导入 Control.Monad、Control.Monad.Instances 和 Data.Either,如图所示

module Main where

import Control.Monad
import Data.Either
import Control.Monad.Instances

test :: [Either a b] -> Either a [b]
test = sequence

main = return ()

但是 ghc 告诉我它无法推导出 (Monad (Either a))。添加

instance Monad (Either a) where
return = Right
Right b >>= f = f b
Left a >>= _ = Left a

使代码编译,但是这个实例声明看起来很笼统,如果它还没有出现在某个标准模块中,那么它对我来说就没有意义。如果是,我应该在哪里找到它,如果不是,有什么原因吗?

-------------- 编辑 ---------------

请注意,我现在认为下面 user31708 的答案(“从基础 4.6 开始,实例位于 Data.Either 本身。”)当前是正确的答案。我不确定在这种情况下重新分配所选答案的正确协议(protocol),其中所选答案是提出问题时的正确答案,因此我将其保留原样。如果有其他指导方针,请纠正我。

最佳答案

这个instance已添加到 base 4.3.x.x 中,该版本随 ghc 7 一起提供。同时,您可以直接使用 Either 实例,或者,如果您使用 Either 来表示某些内容这可能会失败,你应该使用 ErrorT单子(monad)变压器。

关于haskell - 是否没有标准(任一)monad 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112212/

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