m0m*_*eni 4 null haskell null-coalescing-operator maybe
我想知道如何定义一个运算符/如果一个运算符已经存在于Haskell中,它允许选择第一个Maybe不是的类型,Nothing如果它们都没有,则返回一些默认值.基本上是这样的:
let x = a ?? b ?? c ?? 1
Run Code Online (Sandbox Code Playgroud)
(??)运营商在哪里,a, b, c都是Maybe各种类型.我期望这个代码返回的第一个值是Just或者1如果所有的a, b, c都是Nothing.
我基本上希望复制与您在C#其他语言中找到的空合并运算符相同的功能.
这个问题说明了如何在F#中实现它(F#中的Null Coalescing Operator?),而且非常hacky.有没有办法在Haskell中干净利落地完成它,如果不是,那么最接近它的是什么?
Ale*_*lec 12
Haskeller通常会(<|>) :: Maybe a -> Maybe a -> Maybe a用于此类事情.假设a, b, c :: Maybe Int你有x :: Maybe Int
let x = a <|> b <|> c <|> Just 1
Run Code Online (Sandbox Code Playgroud)
当然,这不是你要求的.如果你愿意,你可以定义它!
-- You expect `a ?? b ?? c ?? 1` to parse as `a ?? (b ?? (c ?? 1))`
infixr 3 ??
-- (Someone is going to point out that `(??) = flip fromMaybe`, so I am first)
(??) :: Maybe a -> a -> a
Just x ?? _ = x
Nothing ?? y = y
Run Code Online (Sandbox Code Playgroud)
然后,您将获得您期望的行为.假设a, b, c :: Maybe Int你有x :: Int:
let x = a ?? b ?? c ?? 1
Run Code Online (Sandbox Code Playgroud)