私は最近、一般的なControl.Applicative.optional
コンビネータに出くわしました:
optional :: Alternative f => f a -> f (Maybe a)
optional v = Just <$> v <|> pure Nothing
しかし、私はそのコンビネータの実用性はあまりありません。たとえば、リストやなどの純粋なファンクタに適用した場合Maybe
、結果はあまり有用ではないようです。
> optional [1,2,3]
[Just 1,Just 2,Just 3,Nothing]
> optional Nothing
Just Nothing
> optional (Just 1)
Just (Just 1)
...より賢明なアプリケーションは何でしょうoptional
か?