cmd :: String -> a -> P a flag :: String -> P Bool run :: P (IO a) -> IO a kw :: String -> P () many :: P a -> P [a] some :: P a -> P [a] opt :: P a -> P (Maybe a) (#@) :: (a->b) -> P a -> P b