module Language.Eiffel.Parser.Clause where import Control.Applicative ((<$>), (<*)) import Language.Eiffel.Syntax import Language.Eiffel.Parser.Expr import Language.Eiffel.Parser.Lex import Language.Eiffel.Position import Text.Parsec clause :: Parser (Clause Expr) clause = do let tagNoExpr = do i <- identifier <* colon p <- getPosition e <- option (attachPos p (LitBool True)) expr return (Clause (Just i) e) withExpr = do tag <- try (Just <$> identifier <* colon) <|> return Nothing Clause tag <$> expr in try tagNoExpr <|> withExpr