xcb-types-0.1.0: Data/XCB/Utils.hs
module Data.XCB.Utils where
-- random utility functions
import Data.Char
import Control.Applicative
ensureUpper :: String -> String
ensureUpper [] = []
ensureUpper (x:xs) = (toUpper x) : xs
-- |Like mapMaybe, but for any Alternative.
-- Never returns 'empty', instead returns 'pure []'
mapAlt :: Alternative f => (a -> f b) -> [a] -> f [b]
mapAlt f xs = go xs
where go [] = pure []
go (y:ys) = pure (:) <*> f y <*> go ys
<|> go ys