haskell - 如何循环遍历一元值列表?

标签 haskell

假设我有一个 3 的列表值:es = [MyMonad 33, MyMonad 55, MyMonad 88] .然后我会表演

do v1 <- funcReturningMyMonad (es !! 0)
   v2 <- funcReturningMyMonad (es !! 1)
   v3 <- funcReturningMyMonad (es !! 2)
   funcTakingListOfInts [v1,v2,v3]
我的问题是我想以某种方式为任意长度的列表实现这种行为 n .在上述情况下 n3 .我想过打电话(>>=)按顺序通过列表,但它不会加起来。你将如何实现这种行为?
函数类型:
funcReturningMyMonad :: MyMonad Int -> MyMonad Int
funcTakingListOfInts :: [Int] -> MyMonad Int

最佳答案

自从

funcReturningMyMonad :: MyMonad Int -> MyMonad Int
我们可以用
mapM :: (Traversable t, Monad m) => (a -> m b) -> t a -> m (t b)  
对于第一部分,在我们的例子中将是
 (MyMonad Int -> MyMonad Int) -> [MyMonad Int] -> MyMonad [Int]
然后我们可以使用绑定(bind)运算符来应用 funcTakingListOfInts所以你最终会得到:
(mapM funcReturningMyMonad es) >>= funcTakingListOfInts

关于haskell - 如何循环遍历一元值列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69302874/

相关文章:

haskell - 重用多个值构造函数模式匹配时避免重复代码

function - 编程 * 仅使用 succ 和 pred

haskell - 有没有办法在 Haskell 中优化这个程序?

haskell - Haskell 中修改了 `break`?

windows - Windows 上两个网络套接字之间的管道数据

haskell - Haskell中用于顺序非线性优化的库?

haskell - 如何让这个 X11 代码工作?

haskell - 复数仿函数和monad的含义和用法?

haskell - 使用 ghc-pkg 重新注册现有包

haskell - 编写简单的 QuickCheck URL 生成器时嵌套 monad 的问题