-->

Does this Bool-producer to Maybe-producer function

2019-07-26 08:01发布

问题:

I found myself wanting this tiny little function, but it doesn't seem to be in Data.Maybe. Is it somewhere else?

splat :: (a -> Bool) -> a -> Maybe a
splat c a
  | c a       = Just a
  | otherwise = Nothing

回答1:

The package monadplus contains exactly this function, named partial:

partial :: (a -> Bool) -> a -> Maybe a


回答2:

splat :: MonadPlus m => (a -> Bool) -> a -> m a
splat c x = guard (c x) >> return x

would be a shorter, more general definition, if you decided you want this. But just using guard in-line wherever you need it is likely to be more convenient anyway.



标签: haskell maybe