type P a nil :: a -> P a token :: (String->Maybe a) -> String -> P a (!) :: P a -> P a -> P a (<@) :: P (a->b) -> P a -> P b (:--) :: P a -> String -> P a parse :: P a -> [String] -> Either ErrorMessage a usage :: P a -> String