gpt4 book ai didi

haskell - 在 Haskell 中写 firstRightOrLefts 的惯用方式?

转载 作者:行者123 更新时间:2023-12-04 02:43:33 25 4
gpt4 key购买 nike

我有以下方法:

firstRightOrLefts :: [Either b a] -> Either [b] a
firstRightOrLefts eithers =
case partitionEithers eithers of
(_, (x : _)) -> Right x
(xs, _) -> Left xs

困扰我的是丑陋的模式匹配,我想知道是否有更惯用的方法来编写这种方法。这个想法是我有一堆可以返回 Eithers 的计算,我只想得到第一个结果或所有错误消息。也许我使用了错误的数据结构。也许 Writer monad 更适合这项任务。在这一点上我真的不确定。为任何帮助干杯!

最佳答案

反向约定实际上只是 Either 的 monad 定义。以及 sequence 的定义足以做到这一点:

ghci> :t sequence :: [Either a b] -> Either a [b]
sequence :: [Either a b] -> Either a [b]
:: [Either a b] -> Either a [b]

因此,要将其实际应用于您的案例,我们需要一个函数 flipEither:
firstRightOrLefts = fe . sequence . map fe
where fe (Left a) = Right a
fe (Right b) = Left b

关于haskell - 在 Haskell 中写 firstRightOrLefts 的惯用方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26765953/

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