HaskellでMaybe Intのリストを合計する慣用的な方法 質問する

HaskellでMaybe Intのリストを合計する慣用的な方法 質問する

以下を実装するより慣用的な方法はありますか? ラムダを取り除く方法が見つからないような気がしますが、ポイントフリーに変換する方法がわかりません。もっと簡単な、非適用的な方法もあるのでしょうか?

import Data.Maybe
import Control.Applicative

foldl (\x y -> pure (+) <*> x <*> y) (Just 0) [Just 3, Just 4]
-- Just 7

foldl (\x y -> pure (+) <*> x <*> y) (Just 0) [Just 3, Just 4, Nothing]
-- Nothing

ベストアンサー1

sequenceControl.Monad から以下を使用します:

> fmap sum $ sequence [Just 3, Just 4]
Just 7
> fmap sum $ sequence [Just 3, Just 4, Nothing]
Nothing

ポイントフリー形式の場合:

sumMaybe :: Num a => [Maybe a] -> Maybe a
sumMaybe = fmap sum . sequence

おすすめ記事