gpt4 book ai didi

haskell - 在 Haskell 中,是否有 运算符的抽象?

转载 作者:行者123 更新时间:2023-12-04 13:26:12 24 4
gpt4 key购买 nike

我刚刚发现自己正在编写这段代码:

import Control.Applicative ((<|>))

x = mA <|> mB <?> c

(<?>) :: Maybe a -> a -> a
Just x <?> _ = x
Nothing <?> y = y

在哪里 mA :: Maybe a , mB :: Maybe a , c :: a , 和 x :: a .基本上,代码说:选择不是 empty的第一个替代方案。并默认为 c .您可以将其称为“reverse Maybe monad”,类似于 <?>将是 pure .

等效地,我可以写
Just x = mA <|> mB <|> pure c,

但我对无可辩驳的模式感到不舒服。或者,当然,
x = fromMaybe c (mA <|> mB)

因为 fromMaybe === flip <?> .
<?>运算符的灵感来自 parsec。当我发现自己定义了这样的实用函数时,我总是会产生怀疑,但我在任何地方都找不到这种默认行为。

显然 AlternativeApplicative不够强大。

我错过了一个类型类吗?

最佳答案

我认为将内容留在 (<?>) = flip fromMaybe 是个好主意.

如果你想概括一下,Foldable似乎是具有空虚概念的最简单的类:

(<?>) :: Foldable t => t a -> a -> a
ta <?> a = foldr const a ta

这将返回 a如果 ta为空,否则 ta 的第一个元素.例子:
Just 0 <?> 10 == 0
Nothing <?> 0 == 0
[] <?> 10 == 10

关于haskell - 在 Haskell 中,是否有 <?> 运算符的抽象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39202164/

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