所以基本上據我了解,使用
mb_l :: Maybe L
l2mb_c :: L -> Maybe C
thing = mb_l >>= l2mb_c
在 Haskell 中相當于使用
fn thing(mb_l: Option<l>, l2mb_c: fn(_: l) -> Option<c>) -> Option<c> {
l2mb_c(mb_l?)
}
生銹。但是在生銹的情況下,我也可以做類似的事情
fn thing2(mb_a: Option<a>, mb_b: Option<b>, ab2mb_c: fn(_: a, _: b) -> Option<c>)
-> Option<c> {
ab2mb_c(mb_a?, mb_b?)
}
有沒有辦法在 Haskell 中做到這一點?
uj5u.com熱心網友回復:
如果你有
mb_a :: Maybe A
mb_b :: Maybe B
ab2mb_c :: A -> B -> Maybe C
您可以將它們組合為
thing = do
a <- mb_a
b <- mb_b
ab2mb_c a b
或者,使用應用風格
thing = join $ ab2mb_c <$> mb_a <*> mb_b
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517152.html
標籤:哈斯克尔
