haskell - 组合任一类型变量

标签 haskell

我在 Haskell 中有一个函数,其返回类型是 Either error b , 并且有“function x = Right b1 ”,对于“function (x:xs) b = 我想得到类似 Right [list of b's] 的东西。我真的不知道如何解释,我是 haskell 的新手。我尝试过: function (x:xs) = function x <$> function xsfunction (x:xs) b = function x b <*> function xs b ,但我收到类型不匹配错误。我唯一想要的就是不要 [Right b1, Right b2, ...]但是,Right [b1, b2, b3] .

最佳答案

如果你的函数是f :: <i>a</i> -> Either <i>b</i> <i>c</i>,那么你实际上已经非常接近了,您可以通过以下方式实现:

function :: [<i>a</i>] -> Either <i>b</i> [<i>c</i>]
function [] = Right []
function (x:xs) = <b>(:) <$></b> f x <b><*></b> function xs

但是没有必要自己实现这个。这是 traverse :: (Applicative f, Traversable t) => (a -> f b) -> t a -> f (t b) 的一个特例。它可以在任何 Traversable 上执行此操作数据结构,因此您可以使用:

function :: [<i>a</i>] -> Either <i>b</i> [<i>c</i>]
function = traverse f

如果其中一个函数调用返回 Left … ,将返回列表中的第一项。

关于haskell - 组合任一类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66805476/

相关文章:

algorithm - Haskell中的精确流量控制

haskell - 有哪些可能的 Haskell 优化键?

haskell - 每个自由单子(monad)超过 ???仿函数产生一个共同点?

haskell - 如何消除选择器功能的歧义?

haskell - 用 aeson 解析 utctime

multithreading - 多线程haskell的优雅退出

haskell - 带有内置 epsilon 的包裹浮点类型

performance - 迭代 State Monad 并以良好的性能按顺序收集结果

Haskell:顺序不敏感的函数式应用程序

haskell - 启动 haskell 平台包 2012.2.0.0 中附带的 winghci 时出错