我想知道如何定义一个运算符/如果Haskell中已经存在一个运算符,它允许选择不是 Nothing
的第一个 Maybe
类型,如果它们都没有,那么它返回一些默认值 . 基本上是这样的:
let x = a ?? b ?? c ?? 1
其中 (??)
是运算符, a, b, c
都是 Maybe
类型 . 我期望这段代码返回第一个值 Just
或 1
如果所有 a, b, c
都是 Nothing
.
我'm basically looking to replicate the same functionality as the null coalescing operator you' d找到 C#
或其他语言 .
这个问题显示了如何在F#(Null Coalescing Operator in F#?)中完成它,并且's quite hacky. Is there a way to do it cleanly in Haskell, and if not, what'是最接近它的?
3 回答
Haskeller一般会使用(<|>) :: Maybe a -> Maybe a -> Maybe a来做这类事情 . 假设
a, b, c :: Maybe Int
,你有x :: Maybe Int
当然,这不是你要求的 . 如果你愿意,你可以定义它!
然后,您将获得您期望的行为 . 假设
a, b, c :: Maybe Int
,你有x :: Int
:你介意用不同的方式写吗?
然后
应该做你想做的 .
如果你想这样做,它是可行的,但需要两个运算符 .
定义了您需要的两个运算符,它们可以工作:
仅仅为了一些练习目的,这个作业也可以用
Monoid
类类型First
表示,它是一个Maybe
monoid,返回最左边的非Nothing值 .