我最近偶然发现了通用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
?