来自元组特定字段的序列

Pau*_*ker 3 monads haskell tuples sequence

我有一个Maybe Int位于第二位的元组。如果这个值什么都没有,那么整个元组就没用了,应该被丢弃。我想对元组进行排序,以将 Maybe 上下文从第二个位置中取出来包围整个元组。

我想做的事情的签名可能是:

Monad m => (a, mb) -> m(a, b)
Run Code Online (Sandbox Code Playgroud)

但我在 Hoogle 上找不到类似的东西。

我读过Haskell ——是否有元组的 monad 序列函数?,但它没有解决这个需要。

https://hackage.haskell.org/package/tuple-0.3.0.2/docs/Data-Tuple-Sequence.html只能处理元组全部包装在 monad 中的情况。IE,Monad m => (ma, mb) -> m(a, b)

我可以使用 lambda 函数来实现此目的,该函数测试元组的第二个元素并产生适当的响应,但我想知道是否有现有的工具可以完成这项工作。

Dav*_*her 12

sequence对于成双成对来说很平常。可遍历的是(,) a,第二个元素是被遍历的元素。

ghci> sequence ('a', Just 3)
Just ('a',3)
ghci> sequence ('a', Nothing)
Nothing
Run Code Online (Sandbox Code Playgroud)