gpt4 book ai didi

haskell - 将 Maybe 元素列表从 Just [[x1],[x2]] 展平为 Just [x1,x2]

转载 作者:行者123 更新时间:2023-12-03 12:34:38 26 4
gpt4 key购买 nike

我有一个我应该这样定义的函数:

func :: (a -> Maybe [b]) -> [a] -> Maybe [b]

它应该如何工作的一些示例:

func (\x -> if x == 0 then Nothing else Just [x]) [1,2]

应该导致:

Just [1,2]

另一个例子:

func (\x -> if x == 0 then Nothing else Just [x]) [1,0]

Nothing

如果列表中的任何内容是 Nothing ,则函数返回 Nothing .否则,如果列表中的所有元素都返回 Just [x]那么它应该返回一个类似的列表:Just [x1, x2, ...] .

我尝试使用 fmap对于上面类似的调用,它返回类似:

[Just [1], Just [2], ...]

如果我使用 sequence在名单上fmap返回,它将遵循上述规则(返回 Nothing 如果列表中的任何内容是 Nothing ),这很棒。除了它返回一个像这样的列表:

Just [[1],[2]]

这不是我需要的格式。在那种情况下,我需要它是:

Just [1,2]

当我刚开始学习 Haskell 时,monad 对我来说仍然是一个新鲜的话题,我在弄清楚如何格式化这个列表或者是否有更好的方法来解决这个问题时遇到了一些麻烦。我无法更改函数类型签名。

最佳答案

转一个像 [[1],[2]] 这样的列表, 进入 [1,2] , 使用 concat .在您的情况下,由于列表位于 Maybe 内,您需要调用 fmap concat就可以了。

另外,请注意,无论何时调用 sequence (或 sequenceA )在 map 的结果上, fmap , 或 <$> ,您可以通过将两者组合成 mapM 来保存一个函数(或 traverse )。

关于haskell - 将 Maybe 元素列表从 Just [[x1],[x2]] 展平为 Just [x1,x2],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55896331/

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