language-eiffel-0.1: Language/Eiffel/Parser/Clause.hs
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