gpt4 book ai didi

haskell - 如何应用在 Haskell 中工作的第一个部分函数?

转载 作者:行者123 更新时间:2023-12-03 15:14:32 25 4
gpt4 key购买 nike

假设我有一个列表 fns来自 a 的部分函数至b ,我将其表示为 a 中的函数至Maybe b , 我有一个对象 x类型 a .现在假设我想从 a 定义另一个函数至Maybe b取第一个 f x 的值那不是 Nothing , 如果这样的 f存在于 fns , 或值 Nothing如果没有 f存在。所以基本上它输出 f x第一个 f有效,或Nothing如果没有 f作品。

想出一些可以完成这项工作的代码并不难。例如,可以创建一个列表 [f x| f <- fns]删除所有 Nothing s ,然后取结果列表的头部,或 Nothing如果该列表为空。但这感觉很笨拙,这似乎是一种一般情况,在这种情况下,使用 Haskell 中的一些内置函数可以实现更时尚的实现。如果是这样,那么我很想知道它是什么。

最佳答案

这就是 Alternative 是为了。它代表选择,您在 Maybe 之间进行选择值(value)观。你可以做类似的事情

foldr (<|>) empty [f x | f <- fns]

Data.Foldable你还有 asum :: (Foldable t, Alternative f) => t (f a) -> f a 它可以更直接地满足您的需求:
asum [f x | f <- fns]

作为旁注,我应该注意 MonadPlus 也为它的 Maybe 做你想做的事实例。如上所述,您可以拥有
foldr mplus mempty [f x | f <- fns]


msum [f x | f <- fns]

但是 IMO 你应该使用 Alternative在这里,因为这更准确地传达了您对“选择”的含义。

关于haskell - 如何应用在 Haskell 中工作的第一个部分函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38984781/

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