houseman-0.1.0: src/Procfile/Parse.hs
module Procfile.Parse where
import Control.Applicative
import Control.Monad
import Text.Parser.LookAhead
import Text.Trifecta hiding (spaces)
import Procfile.Types (App (App), Procfile)
procfile :: Parser Procfile
procfile = proc `sepEndBy` (void newline <|> eof)
proc :: Parser App
proc = do
n <- name
_ <- spaces
c <- cmd
return $ App n c
name :: Parser String
name = some (alphaNum <|> char '_') <* char ':'
<?> "name"
cmd :: Parser String
cmd = manyTill anyChar (eof <|> lookAhead (void newline))
<?> "cmd"
spaces :: CharParsing m => m ()
spaces = skipMany (char ' ') <?> "white space excluding newline"